ASP.NET 徹底活用術のホームへ戻る

Webページの一部をキャッシングする

 

● ユーザーコントロールでキャッシング ~FragmentCache.aspx

 

Webページは、一般にメニューを表示する領域とデータを表示する領域から構成されます。メニュー領域は比較的更新頻度が少ないのでキャッシングを有効にしたいが、データ領域はデータベースから取得したデータを表示するのでキャッシングしたくないといったことがあります。このようにWebページを部分的にキャッシングするには、ASP.NETのユーザーコントロールを使用します。

 

3のサンプルは、Webページに2個のユーザーコントロールを配置しています。左側の「ユーザーコントロール1」には、@OutputCacheディレクティブを追加して10秒間キャッシングするようにしています。右側の「ユーザーコントロール2」はキャッシングを無効にしています。ユーザーコントロール1/2Page_Loadイベントハンドラでは、DataTimeオブジェクトのNowプロパティからシステム日付と時刻を取得してLabelTextプロパティに設定して表示します。

 

Webページが表示されると、ユーザーコントロール1/2に同じ日時が表示されます。ブラウザの[更新]ボタンをクリックしてWebページをリロードすると、ユーザーコントロール2の時刻は最新に更新されますが、ユーザーコントロール1の時刻はキャッシングされていますので更新されません。

 

 

<table cellpadding="10">

<tr>

  <td>

    <uc0:UserControl1 id="UserControl1" runat="server"></uc0:UserControl1>

  </td>

  <td>

    <uc0:UserControl2 id="UserControl2" runat="server"></uc0:UserControl2>

  </td>

</tr>

</table>

 

 

3:ユーザーコントロールを配置してWebページの一部をキャッシングする

 

 

リスト3:ユーザーコントロール1 (UserControl1.ascx)

<%@ Control Language="VB" %>

<%@ OutputCache duration="10" VaryByParam="none" %>

<script runat="server">

    Sub Page_Load(sender As Object, e As EventArgs)

      Label1.Text = DateTime.Now.ToString()

    End Sub

</script>

<h3>ユーザーコントロール1</h3>

現在の時刻:<asp:Label id="Label1" runat="server"></asp:Label>

 

 

リスト4:ユーザーコントロール2  (UserControl2.ascx)

<%@ Control Language="VB" %>

<script runat="server">

    Sub Page_Load()

      Label1.Text = DateTime.Now.ToString()

    End Sub

</script>

<h3>ユーザーコントロール2</h3>

現在の時刻:<asp:Label id="Label1" runat="server"></asp:Label>

 

ASP.NET 徹底活用術のホームへ戻る