この資料では、@ OutputCache ディレクティブを使用して、Visual Basic .NET で ASP.NET のページ出力キャッシュ機能を制御する方法を紹介します。この技法を使用すると、サイトで最も頻繁にアクセスされるページをキャッシュすることができ、これによって Web サーバーのスループットを実質的に向上させることができます。一般に、スループットは 1 秒あたりの要求数で測定されます。この資料のサンプル コードは Duration 属性と VaryByParam 属性の使い方を示すものですが、この資料では、@ OutputCache ディレクティブと共に使用できる他の方法についても簡単に説明します。
注 : この資料には、@ OutputCache ディレクティブのすべての属性と使用例が詳しく説明されているわけではありません。詳細については「
関連情報」を参照してください。
必要条件
-
Microsoft Windows 2000 または Windows XP
-
Microsoft .NET Framework
-
Microsoft Internet Information Server (IIS)
@ OutputCache ディレクティブの概要
@ OutputCache ディレクティブを使用してページ出力キャッシュを制御するには、このディレクティブを単純にページの先頭に追加します。このディレクティブは、Page.InitOutputCache メソッドによって HttpCachePolicy クラスのメソッドに変換されます。
@ OutputCache ディレクティブに含まれる属性と設定値を次に示します。
- Duration : この属性には、項目がキャッシュに保持される期間を指定します。Duration の値は秒単位で記述します。
- VaryByParam : この属性を使用すると、Get パラメータまたは Post パラメータに基づいてキャッシュ エントリが決定されます。たとえば、VaryByParam 属性に testVal という名前の QueryString 変数を設定すると、異なる testVal 値を含むすべてのページ要求がそれぞれ別々のページとしてキャッシュされます。VaryByParam 属性の構文を次のコードに示します。
<%@ OutputCache Duration="Seconds" VaryByParam="testVal"%>
注 : 異なるバージョンの項目がすべてキャッシュされるようにするには、アスタリスク (*) を指定します。キャッシュされる項目のバージョンが 1 つしかない場合は、"none" を指定することもできます。
- Location : この属性には、項目がキャッシュされる場所を指定します。以下の場所を指定できます。
-
Any
-
Client
-
Downstream
-
Server
-
None
Location 属性の構文を次のコードに示します。
<%@ OutputCache Duration="Seconds" Location="Client" %>
- VaryByCustom : この属性はデフォルトで Browser に設定され、項目を要求したブラウザのバージョンごとに、その項目の異なるインスタンスがキャッシュされることを示します。たとえば、Microsoft Internet Explorer 5 と Internet Explorer 5.5 の両方から項目が要求されたとします。VaryByCustom が Browser に設定されていると、ブラウザのバージョンごとにキャッシュ エントリが作成されます。この属性に文字列を指定しただけでは、他のカスタム シナリオに対してキャッシュを制御することはできません。Global.asax ファイルに HttpApplication.GetVaryByCustomString メソッドをオーバーライドするコードを記述しない限り、文字列を指定しても効果はありません。
VaryByCustom 属性の構文を次のコードに示します。
<%@ OutputCache Duration="Seconds" VaryByCustom="string" %>
- VaryByHeader : この属性には、キャッシュ エントリを切り替える条件として特定の HTTP ヘッダー値を指定できます。VaryByHeader 属性の構文を次のコードに示します。
<%@ OutputCache Duration="60" VaryByHeader="Accept-Language" %>
@ OutputCache Duration サンプルの作成手順
以下の手順では、ページ出力キャッシュの Duration 属性を使用して項目のキャッシュ期間を指定する方法を示します。
-
次の手順に従って、新しい Visual Basic ASP.NET Web アプリケーション プロジェクトを作成します。
-
Visual Studio .NET を起動します。
-
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
-
[新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] ボックスの一覧の [Visual Basic プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [ASP.NET Web アプリケーション] をクリックします。[プロジェクト名] ボックスに OutputCacheDemo と入力し、[OK] をクリックします。
-
次の手順に従って、Visual Studio .NET で新しい .aspx ページを作成します。
-
ソリューション エクスプローラでプロジェクト ノードを右クリックし、[追加] をポイントします。次に、[Web フォームの追加] をクリックします。
-
[ファイル名] ボックスに OutputCacheDuration.aspx と入力し、[開く] をクリックします。
-
Visual Studio .NET によってページに追加されたデフォルトの HTML コードを削除します。
-
次のコードを選択して右クリックし、[コピー] をクリックします。Visual Studio .NET で [編集] メニューの [HTML として貼り付け] をクリックし、コードを .aspx ページに貼り付けます。
<%@ OutputCache Duration="20" VaryByParam="none"%>
<HTML>
<HEAD>
<script language="VB" runat="server">
Sub Page_Load(Src As Object, E As EventArgs)
Label1.Text = "Time: " & DateTime.Now.TimeOfDay.ToString()
End Sub
</script>
</HEAD>
<body>
<STRONG>@ OutputCache Duration Sample</STRONG>
<hr>
<br>
<asp:Label id="Label1" runat="server">Label</asp:Label>
<br>
</body>
</HTML>
-
[ファイル] メニューの [OutputCacheDuration.aspx の保存] をクリックし、ページを保存します。
-
統合開発環境 (IDE) で [ビルド] メニューの [ソリューションのビルド] をクリックします。
-
サンプルを実行するには、ソリューション エクスプローラで [OutputCacheDuration.aspx] を右クリックし、[ブラウザで表示] をクリックします。
-
ブラウザにページが表示されたら、ラベルに表示されている時刻を確認します。
-
ブラウザでページを最新の状態に更新します。時刻が前と変わっていないことを確認します。有効期間として設定されている 20 秒を経過してからページを更新すると、新しくキャッシュされたバージョンのページが表示されます。
注 : 外部ブラウザでページを表示している場合は、F5 キーを押すとページを更新できます。Visual Studio .NET IDE の内部ブラウザでページを表示している状態でページを更新するには、そのページを右クリックし、[ブラウザの更新] をクリックします。
@ OutputCache VaryByParam サンプルの作成手順
以下の手順では、ページ出力キャッシュの VaryByParam 属性を使用することにより、ページに渡されたいずれかの QueryString 変数の値に基づいて、異なるバージョンのキャッシュが作成されるようにする方法を示します。
-
次の手順に従って、Visual Studio .NET で新しい .aspx ページを作成します。
-
ソリューション エクスプローラでプロジェクト ノードを右クリックし、[追加] をポイントします。次に、[Web フォームの追加] をクリックします。
-
[ファイル名] ボックスに OutputCacheVaryByParam.aspx と入力し、[開く] をクリックします。
-
Visual Studio .NET によってページに追加されたデフォルトの HTML コードを削除します。
-
次のコードを選択して右クリックし、[コピー] をクリックします。Visual Studio .NET で [編集] メニューの [HTML として貼り付け] をクリックし、コードを .aspx ページに貼り付けます。
<%@ OutputCache Duration="20" VaryByParam="testVal"%>
<HTML>
<HEAD>
<script language="VB" runat="server">
Sub Page_Load(Src As Object, E As EventArgs)
Label1.Text = "Time: " & DateTime.Now.TimeOfDay.ToString()
End Sub
</script>
</HEAD>
<body>
<P>
<STRONG>@ OutputCache VaryByParam Sample</STRONG>
</P>
<P>
<hr>
</P>
<P>
<br>
<asp:Label id="Label1" runat="server"></asp:Label>
<br>
<hr>
<a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=123">testVal(123)</a>
<br>
<a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=345">testVal(345)</a>
</P>
</body>
</HTML>
注 : 上記のコードでは、2 つのハイパーリンクを変更し、使用している Web サーバーの名前を反映させる必要があります。また、VaryByParam 属性は、testVal という QueryString 変数の値に基づいて変化するように設定されています。これにより、QueryString 変数の testVal の値が一致するインスタンスごとにページ出力がキャッシュされます。
-
[ファイル] メニューの [OutputCacheVaryByParam.aspx の保存] をクリックし、ページを保存します。
-
IDE で [ビルド] メニューの [ソリューションのビルド] をクリックします。
-
サンプルを実行するには、ソリューション エクスプローラで [OutputCacheVaryByParam.aspx] を右クリックし、[ブラウザで表示] をクリックします。
-
ブラウザにページが表示されたら、[testVal(123)] をクリックします。これにより、ブラウザには同じページが表示されますが、testVal という QueryString 変数の値は "123" に設定されます。表示された時刻を確認します。
-
もう一度 [testVal(123)] をクリックします。時刻が前と変わっていないことを確認します。ページ出力は testVal 変数の値に基づいてキャッシュされています。
-
[testVal(345)] をクリックします。ページに新しい時刻が表示されることを確認します。
-
もう一度 [testVal(345)] をクリックします。以前のページ出力がキャッシュされていて、それがブラウザに表示されます。
-
[testVal(123)] をクリックして最初のインスタンスに戻ります。渡された QueryString 変数の値に基づき、別のバージョンのページ出力キャッシュが表示されます。
トラブルシューティング
-
VaryByParam を使用する場合は、QueryString 変数の大文字と小文字を変更すると、異なるキャッシュ エントリが追加されることに注意する必要があります。
-
Duration は秒単位で指定することに注意する必要があります。
-
VaryByCustom を使用し、さらに Global.asax ファイルで HttpApplication.GetVaryByCustomString メソッドをオーバーライドしても、属性に指定されたカスタム文字列と一致する情報が見つからない場合は、デフォルトの設定である Browser が使用されます。
ページ出力キャッシュの詳細については、以下のマイクロソフト Web サイトを参照してください。