首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 頁面快取機制完整解析:OutputCache 與 HttpCachePolicy

     編輯:關於ASP.NET

ASP.NET 提供三種主要快取形式:頁面快取、使用者控制項輸出快取和快取 API。

頁面輸出快取作為最簡單的快取形式,將已生成的動/靜態頁面全部內容保存在伺服器記憶體中。當再有請求時,系統直接輸出快取中相關資料,直到快取資料過期。此過程中,快取不再經過頁面處理生命週期。這可縮短請求回應時間,提高應用程式效能。顯然,頁面輸出快取適用於不需頻繁更新資料,而佔用大量時間和資源才能編譯生成的頁面。

實現頁面輸出快取,通常有以下兩種方法:

一、使用 @ OutputCache 指示詞

使用 @ OutputCache 指示詞,能實現頁面輸出快取的一般性需求。@ OutputCache 指示詞在 ASP.NET 頁或頁中包含的使用者控制項的標頭宣告。此方式非常方便,只需幾個簡單屬性設定,即可實現頁面輸出快取策略。

二、使用 HttpCachePolicy 類別

該類別主要包含用於設定快取特定 HTTP 標頭的方法和控制 ASP.NET 頁面輸出快取的方法。與 .NET Framework 1.x 中的 HttpCachePolicy 類別相比,.NET Framework 2.0 中的 HttpCachePolicy 類別得到擴充與發展。

使用這兩種方法,可實現下列功能:

1、使用參數對頁的各個版本進行快取

使用 ASP.NET,可根據指定 HTTP 標頭值對某頁多個版本進行快取。請求頁時,可指定按傳遞到應用程式的單個標頭、多個標頭或所有標頭進行快取。

根據 HTTP 標頭值以宣告方式對某頁各版本進行快取

A、在 ASP.NET 頁中,在 @ OutputCache 指示詞中包含必要的 Duration 和 VaryByParam 或 VaryByControl 屬性。必須將 Duration 設為大於零的整數。若只想按 HTTP 標頭值快取,必須將 VaryByParam 設為 "None"。

B、在 @ OutputCache 指示詞中,包含 VaryByHeader 屬性,將其值設為作為改變快取內容依據的 HTTP 標頭名稱。

下列範例將頁快取 60 秒,並根據 Accept-Language HTTP 標頭傳遞的值設定要快取的頁版本:

<%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>

注意:若要根據多個標頭改變快取內容,請以分號 (;) 作為分隔符包含標頭名稱列表。若要根據所有標頭值改變快取內容,請將 VaryByHeader 設為星號 (*)。

根據 HTTP 標頭值以程式設計方式對某頁各版本進行快取

A、在頁的 Page_Load 方法中,對頁的 Response 物件的 Cache 屬性呼叫 SetCacheability 和 SetExpires 方法。

B、將 VaryByHeaders 屬性中的 HTTP 標頭值設為 true。

下列程式碼範例示範如何為有不同 Accept-Language HTTP 標頭值的請求,將某頁多個版本快取一分鐘:

protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.VaryByHeaders["Accept-Language"] = true;
}

注意:若要根據多個標頭改變快取內容,需在 VaryByHeaders 屬性中設定多個值。若要根據所有標頭改變快取內容,請將 VaryByHeaders["VaryByUnspecifiedParameters"] 設為 true。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved