次の方法で共有


チュートリアル : 出力キャッシュを使用した Web サイトのパフォーマンスの強化

更新 : 2007 年 11 月

パフォーマンスは、Web アプリケーションの重要な側面です。個別の要求に応じるために Web サーバーが実行する必要がある処理の量を減らすことで、応答時間の高速化、サーバーによる同時要求の処理数の増加、中間およびバック エンド データ システムへの負荷の軽減が実現します。

ASP.NET のパフォーマンスを改善する方法の 1 つは、出力キャッシュを使用してサーバーの作業負荷を減らすことです。出力キャッシュは、Web サーバーの応答時間を短縮する最適化処理です。

通常は、ブラウザが ASP.NET ページを要求すると、ASP.NET はページのインスタンスを作成し、ページ内のコードを実行し、データベース クエリ (ある場合) を実行し、ページを動的にアセンブルし、結果の出力をブラウザに送信します。出力キャッシュを使用すると、ASP.NET では、このプロセスを要求ごとに経由しなくても、あらかじめ処理されたページのコピーを送信できます。この違いにより、Web サーバーが実行する処理の量が削減され、パフォーマンスが向上し、スケーラビリティが大幅に向上します。

このチュートリアルでは、以下のタスクを行います。

  • ページのキャッシュ。ブラウザの種類、個別のパラメータ、またはデータに関係なく、いずれかのページ ディレクティブを使用して、ページ出力全体をキャッシュします。

  • アプリケーション レベルのキャッシュ プロファイルの使用。この機能により、アプリケーション全体の出力キャッシュ設定を定義できます。個別のページを Web.config ファイルに格納されたプロファイルに関連付けることができます。これにより、各ページを編集しなくてもキャッシュを集中的に制御できます。

  • ページによって送信された個別のパラメータに基づくキャッシュ。

前提条件

このチュートリアルを実行するための要件は次のとおりです。

  • Visual Web Developer (Visual Studio)

  • Microsoft .NET Framework Version 2.0

Web サイトの作成

チュートリアル : Visual Web Developer での基本的な Web ページの作成」の手順を完了して Visual Web Developer で既に Web サイトを作成してある場合は、その Web サイトを使用できるので、このチュートリアルの次のトピックに進むことができます。それ以外の場合は、次の手順に従って、新しい Web サイトおよびページを作成します。

ファイル システム Web サイトを作成するには

  1. Visual Web Developer を開きます。

  2. [ファイル] メニューの [新しい Web サイト] をクリックします (Visual Web Developer Express Edition では、[ファイル] メニューの [新規作成] をポイントし、[Web サイト] をクリックします)。

    [新しい Web サイト] ダイアログ ボックスが表示されます。

  3. [Visual Studio にインストールされたテンプレート] の [ASP.NET Web サイト] をクリックします。

  4. [場所] ボックスに、Web サイトのページを格納するフォルダの名前を入力します。

    たとえば、フォルダ名として「C:\WebSites」と入力します。

  5. [言語] ボックスで、作業に使用するプログラミング言語をクリックします。

  6. [OK] をクリックします。

  7. Visual Web Developer によりフォルダが作成され、Default.aspx という名前の新しいページが作成されます。

ページ レベル キャッシュの設定

この手順では、基本的なページ キャッシュについて説明します。この手順では、ページが作成された時刻を表示するページに Label コントロールを追加し、キャッシュされるページを設定します。ページの作成時刻を表示することで、ページ要求がキャッシュから行われたかどうかを確認できます。

ページ レベル キャッシュを設定するには

  1. Default.aspx ページを開くか、このページに切り替えます (Web サイトのその他のページを使用することもできます)。

  2. デザイン ビューに切り替えます。

  3. ツールボックスの [標準] グループから、Label コントロールをページにドラッグします。既定の名前「Label1」をそのまま使用します。

  4. ページの空白領域をダブルクリックします。

    デザイナがコード エディタに切り替わり、Page_Load メソッドが作成されます。

  5. 次の強調表示されたコードをメソッドに追加します。

    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs)
         Label1.Text = System.DateTime.Now.ToString()
    End Sub
    
    protected void Page_Load(Object sender, System.EventArgs e)
    {
         Label1.Text = System.DateTime.Now.ToString();
    }
    
  6. Ctrl キーを押しながら F5 キーを押してページを実行します。

    ページがブラウザに表示されると、現在の日付と時刻が表示されます。ブラウザの更新ボタンを押すたびに、タイムスタンプが変わります。

  7. ブラウザを閉じます。

  8. ページの先頭に、次の @ OutputCache ディレクティブを追加します。

    <%@ OutputCache Duration="15" VaryByParam="none" %>
    

    このディレクティブは、キャッシュされるページを設定します。Duration 属性は、ページがキャッシュに 15 秒間残ることを指定します。

  9. Ctrl キーを押しながら F5 キーを押してページを実行します。

  10. ページを複数回更新します。

    ブラウザを更新する回数に関係なく、15 秒ごとにのみ時刻表示が更新されます。これは、存続期間が経過し、ページ コードが再実行された時点で、キャッシュから要求が実行されるためです。

アプリケーション レベル キャッシュの設定

前の手順では、個別のページのキャッシュを設定しました。状況により、Web サイト内のすべてのページにキャッシュを設定する必要があります。異なるキャッシュ規則 (プロファイル) を設定して、そのキャッシュ プロファイルを個別のページのセットに適用する必要がある場合もあります。アプリケーション レベル キャッシュを設定すると、個別のページの @ OutputCache ディレクティブを変更しなくても、1 つの構成ファイルからキャッシュの動作を変更できます。次の手順では、簡単なキャッシュ プロファイルを設定し、前に使用したページにそのプロファイルを使用します。

アプリケーション レベル キャッシュを設定するには

  1. Web.config ファイルが既に存在する場合は、手順 4. に進みます。

  2. ソリューション エクスプローラで、Web サイトの名前を右クリックし、[新しい項目の追加] をクリックします。

  3. [項目の追加] ダイアログ ボックスの [Web 構成ファイル] をクリックし、[追加] をクリックします。

    Web.config という名前を使用していることを確認します。

  4. system.web 要素の子として次の XML を追加します。

    <!-- caching section group -->
    <caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="AppCache1" enabled="true" duration="60"/>
        </outputCacheProfiles>
    </outputCacheSettings>
    </caching>
    
  5. ファイルを保存して閉じます。

  6. 使用した Web ページを開くか、そのページに切り替えてから、ソース ビューに切り替えます。

  7. @ OutputCache ディレクティブを次のように変更します。

    <%@ OutputCache CacheProfile="AppCache1" VaryByParam="none" %>
    
  8. Ctrl キーを押しながら F5 キーを押してページを実行します。

  9. ページを複数回更新します。

    今度は、キャッシュ プロファイルに指定した存続期間 (60 秒) の間、日付は同じままになります。

パラメータを使用したキャッシュ

@ OutputCache ディレクティブでは、VaryByParam 属性を設定する必要があります。これまでは、この属性は "none" に設定されていました。VaryByParam 属性を使用すると、クエリ文字列、フォーム ポスト値、要求ヘッダーなどのパラメータによって ASP.NET が異なるバージョンのページを格納するようにキャッシュを設定できます。

たとえば、選択した都市の気象条件を表示するページでキャッシュ パラメータを使用できます。この場合、気象データは 3 時間ごとにのみ更新されます。このシナリオでは、都市ごとにページの個別のバージョンをキャッシュします。これを行うには、クエリ文字列パラメータによって異なるキャッシュ パラメータを設定します。

次の手順では、ページに追加した Label コントロールを変更して、色付きの背景で時刻が表示されるようにします。色の名前を入力するための TextBox コントロールを使用して、色を変更できます。

ページを送信すると、入力した色がポスト データとして送信され、Label コントロールの背景の色が変わります。新しい色が要求される (ページに新しいポスト データが含まれている) と、ページが再生成され、タイムスタンプが更新されます。ただし、同じ色に対する 2 回目以降の要求では、キャッシュされたページが返されます (存続期間の間隔を超えるまで)。

パラメータに基づいてキャッシュするには

  1. 使用したページを開くか、そのページに切り替えます。

  2. デザイン ビューに切り替えます。

  3. ツールボックスの [標準] グループから、TextBox コントロールをページにドラッグし、ID を Color に設定します。

  4. Button コントロールをページにドラッグします。既定の名前 Button1 をそのまま使用します。

  5. Button コントロールの Text プロパティを "Change Color" に設定します。

    Button コントロールをダブルクリックして、Click イベント ハンドラを作成します。

  6. メソッド内に次の強調表示されたコードを追加します。

    Protected Sub Button1_Click(ByVal sender As Object, _ 
            ByVal e As System.EventArgs) Handles Button1.Click
        Label1.BackColor = _        System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text))
    End Sub
    
    protected void Button1_Click(Object sender, System.EventArgs e)
    {
        Label1.BackColor =         System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text));
    }
    
  7. form 要素の defaultbutton 属性を "Button1" に設定します。

    これにより、Enter キーを押すと、このボタンの Click イベント ハンドラが呼び出されます。

  8. @ OutputCache ディレクティブを次のバージョンで置き換えます。

    <%@ OutputCache Location="Server" Duration="60" VaryByParam="Color" %>
    
  9. Ctrl キーを押しながら F5 キーを押してページを実行します。

  10. テキスト ボックスに "red" または "blue" などの色の名前を入力し、[Change Color] をクリックします。

    ASP.NET により、指定した色を使用するページのバージョンがキャッシュされます。

  11. ページを複数回更新します。

    新しい色の名前を入力しなかった場合、@ OutputCache ディレクティブの Duration 属性によって指定したように、少なくとも 1 分間は日付と時刻は変わりません。

  12. "green" または "orchid" などの新しい色を入力して、ページを送信します。

    今度は、更新された時刻が新しい色で表示されます。

次の手順

このチュートリアルでは、ASP.NET ページのキャッシュの基本的な概念について説明しました。次に示すその他のキャッシュ技法を使用することもできます。

  • ページ宣言を使用する代わりに、プログラムによってキャッシュを指定します。たとえば、Page_Load メソッドでは、(Page.Response.Cache を介して) HttpCachePolicy クラスにアクセスし、それに応じて値と動作を設定できます。

  • データ バインド ページをキャッシュして、依存しているデータが変更された場合のみページが再生成されるようにします。詳細については、「チュートリアル : SQL Server での ASP.NET の出力キャッシュの使用」を参照してください。

参照

処理手順

チュートリアル : SQL Server での ASP.NET の出力キャッシュの使用

概念

ASP.NET のキャッシュの概要

参照

@ OutputCache

HttpCachePolicy

VaryByParams