TurboGears –キャッシング

Webアプリケーションのパフォーマンスを向上させるために、特に長時間の操作に関係する場合は、キャッシュ技術が使用されます。TurboGearsは2種類のキャッシュ技術を提供します-

Whole-page Caching

HTTPプロトコルレベルで機能し、ユーザーのブラウザまたは中間プロキシサーバー(Squidなど)がリクエストをインターセプトしてファイルのキャッシュコピーを返すことにより、サーバーへのリクエスト全体を回避します。

Application-level Caching

これは、アプリケーションサーバー内で機能して、計算値(多くの場合、複雑なデータベースクエリの結果)をキャッシュするため、将来の要求で値を再計算する必要がなくなります。Webアプリケーションの場合、アプリケーションレベルのキャッシュは、複雑なクエリの結果をキャッシュする柔軟な方法を提供するため、特定のコントローラーメソッドの合計負荷を、ユーザー固有またはケース固有のクエリとテンプレートのレンダリングオーバーヘッドに減らすことができます。 。

アプリケーションレベルのキャッシング

前述のように、「クイックスタート」TurboGearsプロジェクトは、キャッシュサポート用にBeakerパッケージを有効にするように構成されています。Beakerは、キャッシュストレージに使用される次のバックエンドをサポートします-

  • memory−プロセスごとのストレージに使用されます。非常に高速です。

  • filesystem −プロセスごとのストレージとマルチプロセス。

  • DBM database −プロセスごと、マルチプロセス、かなり高速。

  • SQLAlchemy database−データベースサーバーごとのストレージ。上記のオプションに比べて遅い。

  • 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 −キャッシュキー。 Default: なし。

  • expire −キャッシュが存続しなければならない期間。 Default: 期限切れになることはありません

  • type −メモリ、dbm、memcached。 Default: dbm。

次の例は、テンプレートのキャッシュを示しています-

@expose(hello.templates.user')
def user(self, username):
   return dict(user = username, tg_cache = dict(key = user, expire = 900))