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等、ページを生成する元データをキャッシュ。