ASP.NET Webフォーム キャッシュ
ASP.NET Webフォーム キャッシュ
概要
一度ブラウザで表示したサイトをメモリに保持しておく事。
再度表示する際のレスポンスが良くなる。
問題点
同一URLであれば、クエリ情報、画面上のコントロールの状態の変更によってパラメーターが異なっても1つのキャッシュとして保存される。
よってユーザーの入力が必要な動的なサイトではレスポンスが良くならない。
ASP.NETの改善点
・リクエストパラメーター
・ヘッダー情報
・ブラウザ種類
等に応じてキャッシュを分ける。
動的なサイトでもレスポンスが良い。
上記改善の手法として、どの種類のデータを保持するか?によって
・出力キャッシュ(ページキャッシュ)
・フラグメントキャッシュ
・データキャッシュ
の種類がある。
出力キャッシュ(ページキャッシュ)
同一URLのページ全体をキャッシュ。
一度表示したページのレスポンスが良くなる。
VaryByParamパラメーター
POSTデータ等のキーによってキャッシュを分ける場合
※~.aspx
<%@ Page
Title="Home Page"
Language="C#"
AutoEventWireup="true"
CodeBehind="Default.aspx.cs"
Inherits="WebFormTest._Default" %>
<%@ OutputCache
Duration="120"
VaryByParam="*" %>
※~.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(s: DateTime.Now.ToString());
}
⇒ページキャッシュされているので前回表示時より120秒以内であれば、
現在時刻でなく前回表示時の時刻が表示されたページが表示される。
※Durationパラメーター
キャッシュを保持する時間(秒)
※VaryByParamパラメーターの設定値
VaryByParam="id"
キーを複数指定する場合
VaryByParam="list;id"
全てのキーを指定
VaryByParam="*"
キーによる振り分けが不要
VaryByParam="none"
VaryByHeaderパラメーター
HTTPヘッダー情報によってキャッシュを分ける際に使用。
<%@ OutputCache
VaryByParam="none"
VaryByHeader="Accept-language"
Duration="120" %>
※↑ 例はヘッダー情報の「言語」によってキャッシュを分ける設定例。
(「ASP.NET 多言語対応」参照)
フラグメントキャッシュ
ページ内の一部分のみをキャッシュ。
ASP.NETユーザーコントロールでの設定が必要。
データキャッシュ
データベースやXML等、ページを生成する元データをキャッシュ。