ASP.NETキャッシュ全解析2:ページ出力キャッシュはネット原文の作者李天平から転送する
13097 ワード
ページ出力キャッシュは最も簡単なキャッシュメカニズムであり、このメカニズムはASP全体をNETページの内容はサーバメモリに保存されます.ユーザがページを要求すると、キャッシュデータが期限切れになるまで関連データがメモリから出力されます.このプロセスでは、キャッシュ・コンテンツは、ページ処理のライフサイクルを再び通過することなく、ユーザーに直接送信されます.通常、ページ出力キャッシュは、頻繁に変更する必要はありませんが、コンパイルが完了するまで多くの処理が必要なページに特に役立ちます.ページ出力キャッシュは、ページのすべての内容をメモリに保存し、クライアントリクエストを完了するために使用されることに注意してください.
ASP.NETでのページキャッシュの使用方法は非常に簡単で、aspxページの上部にこのような宣言を付けるだけでいいです.
Duration:キャッシュ時間(秒)です.これは必須属性です.このプロパティが含まれていない場合は、アナライザエラーが発生します.
バックグラウンドコード:
<%@OutputCache Duration="60"VaryByParam="none"%>を付けないと、ページをリフレッシュするたびに時間が変わります.キャッシュ宣言を加えた後、ページをリフレッシュするたびに時間は変化せず、60秒後に一度変化し、データが60秒キャッシュされたことを示します.
VaryByParam:POSTまたはGETで送信された名前/値ペア(パラメータ)に基づいてページがキャッシュされた内容を更新し、複数のパラメータがセミコロンで区切られていることを意味します.キャッシュ内容をパラメータに基づいて変更しない場合は、値をnoneに設定します.すべてのパラメータ値を変更してキャッシュを更新する場合は、プロパティをアスタリスク(*)に設定します.
例:http://localhost:1165/16-4-3/WebForm1.aspx?p=1はWebForm 1である.aspxページヘッダ宣言キャッシュ:<%@OutputCache Duration="60"VaryByParam="p"%>
以上のコードは、ページキャッシュ時間を60秒に設定し、pパラメータの値に基づいてキャッシュを更新します.すなわち、pの値が変化してからキャッシュを更新します.
ずっとWebForm 1ならaspx?p=1このページにアクセスすると、ページは現在のデータをキャッシュし、p=2の場合、バックグラウンドコード更新キャッシュ内容を実行します.
複数のパラメータがある場合は、次のようになります.http://localhost:1165/16-4-3/WebForm1.aspx?p=1&n=1
<%@OutputCache Duration="60"VaryByParam="p;n"%>
@OutputCacheには他にもいくつかの属性があります.@OutputCache命令の属性パラメータは以下のように記述される.
CacheProfile:Webを呼び出すために使用する.configプロファイルで設定したキャッシュ時間.これはオプションのプロパティで、デフォルトは空の文字("")です.
例えばWeb.configに構成を追加するには、次の手順に従います.
ページに宣言:
注:このプロパティは、ユーザーコントロール(.ascxファイル)に含まれる@OutputCacheコマンドではサポートされていません.ページでこの属性を指定する場合、属性値はoutputCacheSettingsセクションの下にあるoutputCacheProfiles要素の使用可能なアイテムの名前と一致する必要があります.この名前がプロファイル・アイテムと一致しない場合、例外が発生します.
各ページのキャッシュ時間が同じであれば、各ページの設定を必要とせず、1つの場所で制御することで、すべてのページのキャッシュ時間をより統一的に制御することができます.キャッシュ時間を変更するには、Webを変更するだけです.configの構成情報は、各ページを変更することなく使用できます.
VaryByControl:ユーザーコントロールファイルに含まれるサーバーコントロールによってキャッシュを変更します(値はコントロールID、マルチコントロールはセミコロンで区切られます).
ASP.NETページおよびユーザーコントロールで@OutputCacheコマンドを使用する場合、そのプロパティまたはVaryByParamプロパティが必要です.
上記のコード設定キャッシュ有効期間は60秒であり、ページはGETまたはPOSTパラメータに従って変更されない(VaryByParamプロパティを使用しない場合でも、@OutputControlコマンドで明示的に宣言する必要がある).ユーザコントロールにID属性が「DropDownList 1」のサーバコントロール(ドロップダウンボックスコントロールなど)が含まれている場合、キャッシュはそのコントロールの変化に応じてページデータを更新します.
ページ出力キャッシュAPI
ResponseクラスのCacheプロパティは、ページキャッシュポリシーを取得するために使用されます.この方式の核心はSystemを呼び出すことである.Web.HttpCachePolicy.このクラスには、主にキャッシュ特定のHTTPヘッダを設定方法と、ASPを制御する方法が含まれる.NETページ出力キャッシュの方法.与.NET Framework 1.x中のHttpCachePolicy類と比較すると、.NET Framework 2.0におけるHttpCachePolicyクラスは拡張され発展している.主にいくつかの重要な方法を追加した.例えば、SetOmitVarStar方法などである.HttpCachePolicyクラスのメソッドが多いため、いくつかの一般的なメソッドを簡単に説明します.
SetExpiresメソッド:キャッシュの期限切れの絶対時間を設定します.そのパラメータは、期限切れの絶対時間を表すDataTimeクラスのインスタンスです.
protected
void
Page_Load(
object
sender, EventArgs e)
{
//
APIによるキャッシュの設定
//
@OutputCache命令のDuration属性に相当
Response.Cache.SetExpires(DateTime.Now.AddSeconds(
10
));
Response.Cache.SetExpires(DateTime.Parse(
"
6:00:00PM
"
));
}
上記のコードのように、第1行目のコードは、出力キャッシュ時間が60秒であり、ページがGETまたはPOSTパラメータに従って変化しないことを示し、「<%@OutputCache Duration="60"VaryByParam="none"%」」に等しい.2行目のコード設定キャッシュの期限切れの絶対時間は当日午後6時ちょうどです.
SetLastModifiedメソッド:ページのLast-Modified HTTPヘッダを設定します.Last-Modified HTTPヘッダはページの最後の変更時間を表し、キャッシュはそれによってタイミングを計る.キャッシュ制限階層に違反した場合、このメソッドは失敗します.このメソッドのパラメータは、DataTimeクラスのインスタンスです.
SetSlidingExpirationメソッド:キャッシュの有効期限を絶対時間から可変時間に設定します.パラメータはブール値です.パラメータがtrueの場合、Cache-Control HTTPヘッダは各応答に従って更新されます.この期限切れモードは、現在の時間に対してすべての出力セットに期限切れヘッダを追加するIIS構成オプションと同じです.パラメータがFalseの場合、この設定は保持され、有効化された調整可能な期限切れの試行は静的に失敗します.このメソッドは、HTTPヘッダに直接マッピングされません.ソース・サーバのキャッシュ・ポリシーは、後続のモジュールまたはアシスト・リクエストによって設定されます.
SetOmitVaryStarメソッド:ASP.NET 2.0の新しい方法.パラメータ別に区別するときに、応答にvary:*ヘッダーが含まれるかどうかを指定します.メソッドパラメータはブール値で、HttpCachePolicyがVaryByHeadersプロパティに*値を使用しないことを示す場合はtrueです.そうでなければfalseです.
SetCacheabilityメソッド:ページのCache-Control HTTPヘッダを設定します.このヘッダーは、ネットワーク上でドキュメントをキャッシュする方法を制御するために使用されます.この方法には2つのリロード方式があり,異なるのはパラメータである.1つのリロード方法のパラメータは、HttpCacheability列挙値であり、NoCache、Private、Public、Server、ServerAndNoCacheおよびServerAndPrivateを含む(これらの列挙値の定義はMSDNを参照).別の方法のパラメータは2つあり、1つのパラメータはHttpCacheability列挙値であり、もう1つのパラメータは文字列であり、ヘッダに追加されたキャッシュ制御拡張を表す.フィールド拡張子は、PrivateまたはNoCacheコマンドとともに使用される場合にのみ有効であることに注意してください.互換性のないコマンドと拡張子を組み合わせると、このメソッドは無効なパラメータ異常を引き起こします.
ASP.NETでのページキャッシュの使用方法は非常に簡単で、aspxページの上部にこのような宣言を付けるだけでいいです.
<%@ OutputCache Duration="60" VaryByParam="none" %>
Duration:キャッシュ時間(秒)です.これは必須属性です.このプロパティが含まれていない場合は、アナライザエラーが発生します.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CacheWebApp._16_4_3.WebForm1" %>
<%@ OutputCache Duration="60" VaryByParam="none" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title> </title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </div>
</form>
</body>
</html>
バックグラウンドコード:
protected void Page_Load(object sender, EventArgs e)
{ if (!IsPostBack)
{
Label1.Text = DateTime.Now.ToString();
}
}
<%@OutputCache Duration="60"VaryByParam="none"%>を付けないと、ページをリフレッシュするたびに時間が変わります.キャッシュ宣言を加えた後、ページをリフレッシュするたびに時間は変化せず、60秒後に一度変化し、データが60秒キャッシュされたことを示します.
VaryByParam:POSTまたはGETで送信された名前/値ペア(パラメータ)に基づいてページがキャッシュされた内容を更新し、複数のパラメータがセミコロンで区切られていることを意味します.キャッシュ内容をパラメータに基づいて変更しない場合は、値をnoneに設定します.すべてのパラメータ値を変更してキャッシュを更新する場合は、プロパティをアスタリスク(*)に設定します.
例:http://localhost:1165/16-4-3/WebForm1.aspx?p=1はWebForm 1である.aspxページヘッダ宣言キャッシュ:<%@OutputCache Duration="60"VaryByParam="p"%>
以上のコードは、ページキャッシュ時間を60秒に設定し、pパラメータの値に基づいてキャッシュを更新します.すなわち、pの値が変化してからキャッシュを更新します.
ずっとWebForm 1ならaspx?p=1このページにアクセスすると、ページは現在のデータをキャッシュし、p=2の場合、バックグラウンドコード更新キャッシュ内容を実行します.
複数のパラメータがある場合は、次のようになります.http://localhost:1165/16-4-3/WebForm1.aspx?p=1&n=1
<%@OutputCache Duration="60"VaryByParam="p;n"%>
@OutputCacheには他にもいくつかの属性があります.@OutputCache命令の属性パラメータは以下のように記述される.
<%@ OutputCache Duration="#ofseconds"
Location="Any | Client | Downstream | Server | None | ServerAndClient "
Shared="True | False"
VaryByControl="controlname"
VaryByCustom="browser | customstring"
VaryByHeader="headers"
VaryByParam="parametername"
CacheProfile="cache profile name | ''"
NoStore="true | false"
SqlDependency="database/table name pair |CommandNotification"%>
CacheProfile:Webを呼び出すために使用する.configプロファイルで設定したキャッシュ時間.これはオプションのプロパティで、デフォルトは空の文字("")です.
例えばWeb.configに構成を追加するには、次の手順に従います.
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="CacheTest" duration="50" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
ページに宣言:
<%@ OutputCache CacheProfile="CacheTest" VaryByParam="none" %>
注:このプロパティは、ユーザーコントロール(.ascxファイル)に含まれる@OutputCacheコマンドではサポートされていません.ページでこの属性を指定する場合、属性値はoutputCacheSettingsセクションの下にあるoutputCacheProfiles要素の使用可能なアイテムの名前と一致する必要があります.この名前がプロファイル・アイテムと一致しない場合、例外が発生します.
各ページのキャッシュ時間が同じであれば、各ページの設定を必要とせず、1つの場所で制御することで、すべてのページのキャッシュ時間をより統一的に制御することができます.キャッシュ時間を変更するには、Webを変更するだけです.configの構成情報は、各ページを変更することなく使用できます.
VaryByControl:ユーザーコントロールファイルに含まれるサーバーコントロールによってキャッシュを変更します(値はコントロールID、マルチコントロールはセミコロンで区切られます).
ASP.NETページおよびユーザーコントロールで@OutputCacheコマンドを使用する場合、そのプロパティまたはVaryByParamプロパティが必要です.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="CacheWebApp._16_4_3.WebForm2" %>
<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="DropDownList1" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title> </title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%=DateTime.Now %> <br>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>beijing</asp:ListItem>
<asp:ListItem>shanghai</asp:ListItem>
<asp:ListItem>guangzhou</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text=" " />
</div>
</form>
</body>
</html>
上記のコード設定キャッシュ有効期間は60秒であり、ページはGETまたはPOSTパラメータに従って変更されない(VaryByParamプロパティを使用しない場合でも、@OutputControlコマンドで明示的に宣言する必要がある).ユーザコントロールにID属性が「DropDownList 1」のサーバコントロール(ドロップダウンボックスコントロールなど)が含まれている場合、キャッシュはそのコントロールの変化に応じてページデータを更新します.
ページ出力キャッシュAPI
ResponseクラスのCacheプロパティは、ページキャッシュポリシーを取得するために使用されます.この方式の核心はSystemを呼び出すことである.Web.HttpCachePolicy.このクラスには、主にキャッシュ特定のHTTPヘッダを設定方法と、ASPを制御する方法が含まれる.NETページ出力キャッシュの方法.与.NET Framework 1.x中のHttpCachePolicy類と比較すると、.NET Framework 2.0におけるHttpCachePolicyクラスは拡張され発展している.主にいくつかの重要な方法を追加した.例えば、SetOmitVarStar方法などである.HttpCachePolicyクラスのメソッドが多いため、いくつかの一般的なメソッドを簡単に説明します.
SetExpiresメソッド:キャッシュの期限切れの絶対時間を設定します.そのパラメータは、期限切れの絶対時間を表すDataTimeクラスのインスタンスです.
protected
void
Page_Load(
object
sender, EventArgs e)
{
//
APIによるキャッシュの設定
//
@OutputCache命令のDuration属性に相当
Response.Cache.SetExpires(DateTime.Now.AddSeconds(
10
));
Response.Cache.SetExpires(DateTime.Parse(
"
6:00:00PM
"
));
}
上記のコードのように、第1行目のコードは、出力キャッシュ時間が60秒であり、ページがGETまたはPOSTパラメータに従って変化しないことを示し、「<%@OutputCache Duration="60"VaryByParam="none"%」」に等しい.2行目のコード設定キャッシュの期限切れの絶対時間は当日午後6時ちょうどです.
SetLastModifiedメソッド:ページのLast-Modified HTTPヘッダを設定します.Last-Modified HTTPヘッダはページの最後の変更時間を表し、キャッシュはそれによってタイミングを計る.キャッシュ制限階層に違反した場合、このメソッドは失敗します.このメソッドのパラメータは、DataTimeクラスのインスタンスです.
SetSlidingExpirationメソッド:キャッシュの有効期限を絶対時間から可変時間に設定します.パラメータはブール値です.パラメータがtrueの場合、Cache-Control HTTPヘッダは各応答に従って更新されます.この期限切れモードは、現在の時間に対してすべての出力セットに期限切れヘッダを追加するIIS構成オプションと同じです.パラメータがFalseの場合、この設定は保持され、有効化された調整可能な期限切れの試行は静的に失敗します.このメソッドは、HTTPヘッダに直接マッピングされません.ソース・サーバのキャッシュ・ポリシーは、後続のモジュールまたはアシスト・リクエストによって設定されます.
SetOmitVaryStarメソッド:ASP.NET 2.0の新しい方法.パラメータ別に区別するときに、応答にvary:*ヘッダーが含まれるかどうかを指定します.メソッドパラメータはブール値で、HttpCachePolicyがVaryByHeadersプロパティに*値を使用しないことを示す場合はtrueです.そうでなければfalseです.
SetCacheabilityメソッド:ページのCache-Control HTTPヘッダを設定します.このヘッダーは、ネットワーク上でドキュメントをキャッシュする方法を制御するために使用されます.この方法には2つのリロード方式があり,異なるのはパラメータである.1つのリロード方法のパラメータは、HttpCacheability列挙値であり、NoCache、Private、Public、Server、ServerAndNoCacheおよびServerAndPrivateを含む(これらの列挙値の定義はMSDNを参照).別の方法のパラメータは2つあり、1つのパラメータはHttpCacheability列挙値であり、もう1つのパラメータは文字列であり、ヘッダに追加されたキャッシュ制御拡張を表す.フィールド拡張子は、PrivateまたはNoCacheコマンドとともに使用される場合にのみ有効であることに注意してください.互換性のないコマンドと拡張子を組み合わせると、このメソッドは無効なパラメータ異常を引き起こします.