|
.NET TIPS [ASP.NET]Webフォーム・ページの一部分を断片的にキャッシングするには?山田 祥寛2004/11/12 |
![]() |
|
|
|
「TIPS:[ASP.NET]サイト共通のレイアウト部分を部品化するには?」でも紹介したように、ユーザー・コントロールを利用することで、サイト共通のレイアウト部品を容易に部品化することができる。ユーザー・コントロールを利用するメリットは、ユーザー・コントロール自体の構築の容易さ、セキュリティ面など多岐にわたるが、その中でも忘れてならないのは「フラグメント・キャッシュ」を利用できるという点だ。
「TIPS:[ASP.NET]リクエスト・パラメータごとにページをキャッシングするには?」でも紹介したように、ASP.NETにはさまざまなキャッシング技術が用意されている。その中でも、フラグメント・キャッシュは特徴的なキャッシング技術の1つだ。フラグメント・キャッシュがページ・キャッシュと異なる点は、その名のとおり、ページ全体ではなく、ページの断片(フラグメント)の単位にコンテンツをキャッシュできるという点である。
1つのWebページの中には、多くの要素が詰まっている。その中には、例えばメニューやナビゲートバー、ヘッダ/フッタのように、更新頻度が少ない(または、基本的に更新されない)コンテンツと、最新ニュースやユーザーの書き込みデータなど、頻繁に内容が変更されるコンテンツとが混在している。これを十把ひとからげにページ単位でキャッシュすることは、実は極めて非効率である。しかし、フラグメント・キャッシュを利用することで、こうした状況にも柔軟に対応することができる。
フラグメント・キャッシュは、ユーザー・コントロールの単位に異なるキャッシュ・ルールを設定するための仕組みを提供する。つまり、ヘッダやメニューのような(半)静的なコンテンツについてはキャッシュの有効期限を長くし、よりトランザクショナルなコンテンツについては有効期限を短くする、もしくはキャッシュ自体を無効にする、といった設定が可能になる。
フラグメント・キャッシュの設定方法は簡単だ。ユーザー・コントロールを定義する.ascxファイルで、@OutputCacheディレクティブを指定するだけでよい。例えば、「TIPS:[ASP.NET]サイト共通のレイアウト部品を部品化するには?」で定義したheader_cs.ascx(C#)/header_vb.ascx(VB.NET)でフラグメント・キャッシュを有効にするには、以下の一文を追加すればよい。
|
|
| フラグメント・キャッシュを有効にしたユーザー・コントロール(C#:header_cs.ascx) |
この場合には、header_cs.ascxが担当する描画領域に対して「のみ」、120秒間のキャッシュが有効になる。@OutputCacheディレクティブについては、「TIPS:[ASP.NET]リクエスト・パラメータごとにページをキャッシングするには?」が詳しいが、1つだけ注意していただきたいのは、@OutputCahceディレクティブは.aspxファイル/.ascxファイルいずれに記述するかによって、利用できる属性が異なるという点だ。以下に、対応関係をまとめておこう。
| 属性名 | .aspx | .ascx |
| Duration | ◎ | ◎ |
| Location | ○ | × |
| Shared | × | ○ |
| VaryByCustom | ○ | ○ |
| VaryByHeader | ○ | × |
| VaryByParam | ◎ | ◎※ |
| VaryByControl | × | ◎※ |
| @OutputCacheディレクティブの属性と.aspx/.ascxとの対応関係 | ||
| ◎:必須 ○:任意 ×:使用不可 | ||
| ※VaryByParam属性とVaryByControl属性のいずれか一方が必須。 | ||
このうち、Shared属性は、フラグメント・キャッシュを複数ページでも共有可能にするかどうかをTrue/False(デフォルトはFalse)で指定するものだ。例えば、サイト共通で同じ表示が期待されるヘッダやメニュー部分にユーザー・コントロールを利用する場合には、Shared属性をTrueに設定しておくことで、サイト全体のパフォーマンスを向上させることができるだろう。
また、VaryByControl属性は、キャッシュを切り替えるためのキーとなるコントロール名(複数指定の場合はセミコロン区切り)を指定する。VaryByControl属性を利用することで、例えば、入れ子で設置したユーザー・コントロールに対して階層的にキャッシュ・ルールを設定することができる。![]()
| カテゴリ:Webフォーム 処理対象:キャッシング 使用キーワード:@OutputCacheディレクティブ 関連TIPS:[ASP.NET]サイト共通のレイアウト部分を部品化するには? 関連TIPS:[ASP.NET]リクエスト・パラメータごとにページをキャッシングするには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


