TurboGears – 快取



為了提高 Web 應用程式的效能,尤其是在涉及冗長操作的情況下,會使用快取技術。TurboGears 提供兩種型別的快取技術:

全頁快取

它在 HTTP 協議級別工作,透過讓使用者的瀏覽器或中間代理伺服器(例如 Squid)攔截請求並返回檔案的快取副本,從而避免向伺服器發出完整的請求。

應用程式級快取

這在應用程式伺服器內工作,以快取計算值,通常是複雜資料庫查詢的結果,以便未來的請求可以避免重新計算這些值。對於 Web 應用程式,應用程式級快取提供了一種靈活的方法來快取複雜查詢的結果,以便給定控制器方法的總負載可以減少到幾個使用者特定或案例特定的查詢,以及模板的渲染開銷。

應用程式級快取

如前所述,“快速啟動”的 TurboGears 專案已配置為啟用 Beaker 包以支援快取。Beaker 支援以下用於快取儲存的後端:

  • 記憶體 - 用於程序記憶體儲。它非常快。

  • 檔案系統 - 程序記憶體儲以及多程序。

  • DBM 資料庫 - 程序內、多程序,速度相當快。

  • SQLAlchemy 資料庫 - 基於資料庫伺服器的儲存。與上述選項相比速度較慢。

  • Memcached - 基於多伺服器記憶體的快取。

控制器快取

對於快速控制器快取,可以使用cached()裝飾器。整個控制器主體根據請求的各種引數進行快取。tg.decorators.cached()裝飾器的定義如下:

tg.decorators.cached(key, expire, type, 
   query-args, cache_headers, invalidate_on_startup, cache_response)

引數說明如下:

序號 引數及說明
1

key

指定用於生成快取鍵的控制器引數。

2

expire

快取過期前的時間(秒),預設為“永不過期”。

3

Type

dbm、memory、file、memcached 或 None。

4

cache_headers

指示響應頭的標頭名稱元組。

5

invalidate_on_startup

如果為 True,則每次應用程式啟動或重新啟動時都會使快取失效。

6

cache_response

是否應快取響應,預設為 True。

以下是控制器快取的示例:

@cached(expire = 100, type = 'memory')
@expose()
def simple(self):
   return "This is a cached controller!"

模板級別快取

如果 Genshi 模板引擎的內容沒有更改,它會從快取中檢索模板。此快取的預設大小為 25。預設情況下,模板的自動重新載入為 true。為了提高效能,可以在app_cfg.py中進行以下設定:

[app:main]
genshi.max_cache_size = 100
auto_reload_templates = false

要快取模板,只需從渲染快取模板的控制器返回tg_cache選項。

tg_cache 是一個字典,它接受以下鍵:

  • key - 快取鍵。預設值:None。

  • expire - 快取必須保持活動狀態的時間。預設值:永不過期

  • type - memory、dbm、memcached。預設值:dbm。

以下示例說明了模板快取:

@expose(hello.templates.user')
def user(self, username):
   return dict(user = username, tg_cache = dict(key = user, expire = 900))
廣告
© . All rights reserved.