天天看點

深入剖析ASP.NET 2.0緩沖機制(5)

七、部分頁面緩沖技術

到目前為止,你已經看到了如何在SqlDataSource控件中使用緩沖技術。本節将向你展示如何使用回寄方式緩存Substitution以便 用重新整理的内容替換被緩沖的内容部分。這稱作“部分頁面緩沖”或“頁面片斷緩沖”。這是一種強有力的特征,它允許應用程式使用頁面級緩沖—即使該頁面的部分 是動态生成的。

頁面片斷緩沖提供對頁面中一個片斷進行緩沖的功能,這與緩沖整個頁面形成對照。有時,整頁面輸出緩沖是不可行的—例如,當該頁面的部分需要針對每一 個使用者請求動态地建立時。在這些情況下,辨別出該頁面或控件中不經常改變的部分以及那些需要耗費相應的伺服器時間資源才能建立的部分可能是非常有價值的。 在你辨別這些部分後,你就能夠把它們包裝到一個Web表單使用者控件中并且緩存該控件;這樣以來,頁面中的這些部分就不需要每次被重建。這是在 ASP.NET 2.0以前實作頁面片斷緩沖的唯一方法。借助于ASP.NET 2.0中的新的回寄緩存Substitution特征,在頁面呈現給使用者之前,你可以通知ASP.NET運作時刻重新計算一個特定元素(正當它被生成到一 個緩沖頁面上時)。為此,你可以使用兩種方案來實作這一目的:

◆調用新的Response.WriteSubstitution方法,同時傳遞一個到Substitution回調函數的引用。

◆把一個<asp:substitution>控件添加到Web頁面并且把MethodName屬性設定為該回調函數名。

無論使用哪種方案,你都需要在該頁面的頂部放一條@Output緩存指令以指定相應的持續時間,而且該依賴性的其它的參數也應該被添加到該頁面上。在這個示例中,我們選用Substitution控件。

該Substitution控件具有一個重要的屬性—MethodName,它用于指定被調用以提供動态内容的方法。注意,Substitution控件調用的方法必須是一個靜态方法。

而且,該方法必須有一個代表目前HttpContext的參數。為了說明這個問題,我們建立一個新的Web表單PartialPageCaching.aspx并把它添加到網站上。下面是示例PartialPageCaching.aspx相應的實作代碼:

<%@ Page Language="C#" %>

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

<mce:script runat="server"><!--

public static string GetRandomNumber(HttpContext context)

{

int randomNumber;

randomNumber = new System.Random().Next(1, 10000);

return randomNumber.ToString();

}

// --></mce:script>

<html>

<head>

<title>Partial Page Caching using Substitution control</title>

</head>

<body>

<form id="form1" runat="server">

The random number generated is:

<asp:Substitution ID="Substitution1" MethodName="GetRandomNumber"

Runat="Server"/>

<p>

The current time is

<%= DateTime.Now.ToString("t") %>. It never changes since the

page is cached.

</p>

</form>

</body>

</html>

在該頁面的頂部,Output緩存指令在記憶體中緩沖該頁面的内容。在Output緩存指令中,你把Duration屬性設定為6,000毫秒。 VaryByParam屬性顯示,在進行緩沖時ASP.NET是否應該考慮這些頁面參數。當把VaryByParam設定為none時,卻意味着不考慮任 何參數;所有的使用者将接收相同的頁面而不考慮提供的其它參數(參考下圖2的輸出結果)。

深入剖析ASP.NET 2.0緩沖機制(5)

圖2:部分頁面緩沖運作效果圖

Substitution控件的MethodName屬性被設定為一個方法GetRandomNumber,它簡單地傳回一個在1~10,000之 間的随機數字。當你向該頁面發出一個請求時,被顯示的目前時間總是保持不變,而被該Substitution控件生成的頁面部分卻每次都保持改變。在這種 情況下,在每當有人請求該頁面時,它顯示一個在1~10,000之間的随機數字。

八、結論

ASP.NET 2.0提供的緩存API基于ASP.NET 1.0基礎之上,并且有助于我們實作建構高性能的ASP.NET應用程式的理想。ASP.NET 2.0提供的新的資料源控件中提供了使在記憶體中緩沖資料庫資料非常容易的屬性。借助于這些控件,你可以檢索并緩沖資料庫資料而不需編寫一行代碼。當資料庫 中的資料改變時能夠無效一個緩沖項,這是微軟開發人員經過長期探索才找到的一種革命化ASP.NET應用程式建構和釋出的方式。最後,新的 Substitution控件有助于使你很容易地把動态的内容注入到一個緩沖頁面中。