頁面緩衝策略的實施可以很好的解決那些請求多,而變化少的頁面或是資料的效能問題,一旦我們為這些內容實施了緩衝策略,那末在特定時間以內(開發人員設定),如果有新的請求,系統會直接從記憶體中調出緩衝的內容,反饋給client,而不必每次都從資料庫重新獲得資料,再進行html轉換後反饋。
1.資料緩衝:這裡指的是利用cache進行資料緩衝。關於cache的用法之前已經談過,通常的做法是:對某些資訊insert到cache中,並設定到期時間;每次調用cache的時候,檢查是否為null ,如果是null,重新insert,負責直接使用cache中資料即可.當然也經常會採用檔案依賴來動態更新cache資料。
2.頁面緩衝:
1)整個頁面緩衝。只需要在頁面頭部加入:
<%...@ OutputCache Duration ="5" VaryByParam ="none" %>
其中的參數的含義,可以查詢MSdn詳細瞭解.這種情況實用於整個頁面在一段時間內不會發生變化,比如“本周焦點”,“使用說明”等。但是實際上,我們還要對其中某些部分取消緩衝動態顯示。
2)使用Substitution控制項實現在整頁緩衝的頁面中部分動態變化。<asp:Substitution ID="Substitution1" runat="server" MethodName ="MethodName"/>
這個控制項在頁面中只是個預留位置,動態載入的資訊會取代它的位置。其中的MethodName既是動態執行的後台方法名稱.比如如果想在這裡動態顯示目前時間: public static string getTime(HttpContext context)
...{
return DateTime.Now.ToString();
}
注意:這個方法必須是:靜態public,並且只能返回string ,參數為HttpContext.
當然還能做更多的事情,比如你可以在此檢查使用者權限,並顯示使用者資訊等。
3)如果只想使部分頁面緩衝,採用使用者控制項就是一個 好辦法,因為在這裡就可以設定期緩衝參數:
<%...@ Control Language="C#" AutoEventWireup="true" CodeFile="uc1.ascx.cs" Inherits="uc1" %>
<%...@ OutputCache VaryByParam ="none" Duration ="10" %>
UC-DateTime:<asp:Label ID="Label1" runat="server" Text=''></asp:Label>
public partial class uc1 : System.Web.UI.UserControl
...{
protected void Page_Load(object sender, EventArgs e)
...{
Label1.Text = DateTime.Now.ToString();
}
}
這樣,如果把這個控制項拖到頁面中,那隻會緩衝uc部分,而不會對其他部分影響。