.NET TIPS [ASP.NET]サイト共通のキャッシュ・ポリシーを設定するには?[2.0のみ、C#、VB]山田 祥寛2006/09/29 |
|
|
「TIPS:[ASP.NET]リクエスト・パラメータごとにページをキャッシングするには?」でも紹介したように、ASP.NETでは、@OutputCacheディレクティブを利用してキャッシュの有効期限やキー項目などのパラメータの指定を行うだけで、ページ・キャッシュ機能を実現できる。キャッシュに当たって特別なコーディングが一切不要であるという意味で、ずいぶんと重宝してきた読者諸兄も多かったかもしれない。
しかし、ASP.NET 1.xの@OutputCacheディレクティブには課題も残されていた。というのも、ASP.NET 1.xの@OutputCacheディレクティブでは、ページ単位でキャッシュ・ポリシー(規則)を指定する必要があったのだ。
そもそもキャッシュ・ポリシーがページごとに異なるというケースはまれだ。アプリケーション一律、とはいわないまでも、ページに含まれるコンテンツの種類や更新の頻度などによって、せいぜいキャッシュ・ポリシーはアプリケーション内で2〜3種類に決定するのが一般的であるはずだ。
にもかかわらず、ポリシーを個々のページで記述するのは煩雑であるし、何より変更があった場合に、関係するすべてのページをいちいち修正しなければならないというのは、アプリケーションの保守性という観点からも好ましくない。修正漏れやつまらないバグが混入する原因にもなるだろう。
そこでASP.NET 2.0では、キャッシュ・ポリシーをアプリケーション構成ファイル(Web.config)で管理できるようになった。キャッシュ・ポリシーを定義するには、例えば、以下のように記述すればよい。
|
|
キャッシュ・ポリシーを定義するアプリケーション構成ファイル(Web.config) |
キャッシュ・ポリシーを定義するのは、<caching>/<outputCacheSettings>/<add>要素の役割だ。name属性には、ポリシーを一意に識別する任意の名前を指定する必要がある。そのほか、<add>要素で指定可能な属性は、以下のとおりだ。
属性 | 概要 | ||||||||||||||
enabled | キャッシュを有効にするか | ||||||||||||||
duration | キャッシュの有効期限(秒) | ||||||||||||||
location | キャッシュ・データの格納先
|
||||||||||||||
sqlDependency | データベース・キャッシングの依存キー(詳細は「TIPS:[ASP.NET]データベース更新のタイミングでキャッシュを破棄するには?」で解説している) | ||||||||||||||
varyByControl | キャッシュ・データを切り替えるためのコントロールID | ||||||||||||||
varyByCustom | キャッシュ・データを切り替えるための任意のキー | ||||||||||||||
varyByHeader | キャッシュ・データを切り替えるためのHTTPヘッダ名 | ||||||||||||||
varyByParam | キャッシュ・データを切り替えるためのリクエスト・パラメータ名(パラメータによる区別をしない場合は“none”、すべてのパラメータを切り替えのキーにしたい場合には“*”を指定することも可能) | ||||||||||||||
noStore | 「Cache-Control: no-store」ヘッダを送信するか | ||||||||||||||
<add>要素で指定可能な主な属性 |
このように定義されたキャッシュ・ポリシー“MyCache”をWebフォームに適用するには、@OutputCacheディレクティブで以下のように記述すればよい。
<%@ OutputCache CacheProfile="MyCache" %> |
これで、キャッシュ・ポリシーに変更があった場合にも(個別のページではなく)アプリケーション構成ファイルの定義だけを修正すればよいので、ポリシー変更が発生した場合にも容易に対応が可能になる。
最後に、<caching>要素配下で利用可能な子要素とその主な属性をまとめておく。
要素 | 属性 | 概要 | デフォルト |
<cache> | disableMemoryCollection | メモリ圧迫時に発生するキャッシュのメモリ収集を無効にするか | false |
disableExpiration | キャッシュの有効期限を無効にするか | false | |
privateBytesLimit | 有効期限切れキャッシュのクリア処理を行うまでの、アプリケーションのプライベート・メモリの上限 | 0(自動判定) | |
percentagePhysicalMemoryUsedLimit | 有効期限切れキャッシュのクリア処理を行うまでの、物理メモリの最大パーセンテージ | 90 | |
privateBytesPollTime | プライベート・メモリの消費を監視するポーリング間隔 | 00:02:00 | |
<outputCache> | enableOutputCache | ページの出力キャッシュを有効にするか | true |
enableFragmentCache | フラグメント・キャッシュを有効にするか | true | |
sendCacheControlHeader | 「cache-control:private」ヘッダを送信するか | true | |
omitVaryStar | 「HTTP Vary: *」ヘッダを送信するか | false | |
<caching>要素配下の主な子要素と属性 |
これらの<caching>要素配下の子要素を指定することで、キャッシュにかかわるさまざまなパラメータを規定することが可能だ。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Webフォーム 処理対象:キャッシュ 使用キーワード:@OutputCacheディレクティブ 使用キーワード:<add>要素 関連TIPS:[ASP.NET]リクエスト・パラメータごとにページをキャッシングするには? 関連TIPS:[ASP.NET]データベース更新のタイミングでキャッシュを破棄するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|