< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>
頁輸出緩存輸出緩存是一種功能強大的技術,它通過緩存從動态頁生成的内容來提高請求/響應的吞吐量。預設情況下啟用輸出緩存,但不緩存來自任何給定響應的輸出,除非采取顯式操作使該響應成為可緩存的。
若要使響應滿足輸出緩存的條件,它必須具有有效的過期/有效性政策和公共的緩存可見性。這可通過使用低級别的 OutputCache API 或進階别的 @ OutputCache 指令來實作。 啟用輸出緩存後,當發出對頁的第一個 GET 請求時建立一個輸出緩存項。随後的 GET 或 HEAD 請求由該輸出緩存項服務,直到該緩存請求過期。
輸出緩存還支援緩存的 GET 或 POST 名稱/值對的變體。
輸出緩存遵循頁的過期和有效性政策。如果某頁位于輸出緩存中,并且有一個過期政策标記訓示該頁自緩存起 60 分鐘後過期,則在 60 分鐘後将該頁從輸出緩存中移除。如果此後接收到另一個請求,則執行頁代碼,并且可以再次緩存該頁。這種過期政策稱為絕對過期,即頁在某個确定的時間之前有效。
下面的示例說明用 @ OutputCache 指令輸出緩存響應的簡單方法。此示例僅顯示生成響應的時間。若要檢視輸出緩存的運作情況,請調用該頁并注意生成響應的時間。然後重新整理該頁并注意原來的時間沒有更改,表明輸出緩存正在為第二個響應服務。
下面的指令在響應時激活輸出緩存:
<%@ OutputCache Duration="60" VaryByParam="none"%>此指令僅訓示頁應緩存 60 秒,而且頁不随任何 GET 或 POST 參數改變。在該頁仍被緩存時接收到的請求由緩存服務。60 秒後,從緩存中移除該頁;将顯式處理下一個請求并再次緩存頁。
當然,在上例中,輸出緩存幾乎沒有省去任何工作。下面的示例顯示相同的輸出緩存技術,但查詢一個資料庫并将結果顯示在網格中。
在最後的示例中,對應用程式做了輕微的修改,使使用者可以有選擇地查詢各個州的作者。此示例說明如何使用 @ OutputCache 指令的 VaryByParam 屬性,緩存随查詢字元串中的名稱/值對值變化的請求。
<%@ OutputCache Duration="60" VaryByParam="state" %>對于資料集中的每個州,都有一個将所需的州作為查詢字元串的一部分進行傳遞的連結。應用程式然後構造合适的資料庫查詢,并顯示僅屬于標明州的作者。
注意,當您第一次單擊給定州的連結時,它在頁的底部生成一個新的時間戳。此後,每當在一分鐘内重新送出對該州的請求時,都會得到原來的時間戳,表示該請求已被緩存。
應用程式若要更多地控制與緩存相關的 HTTP 标頭,可使用 System.Web.HttpCachePolicy 類提供的功能。下面的示例顯示等效于上例中使用的頁指令的代碼。
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))Response.Cache.SetCacheability(HttpCacheability.Public) Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public); C# VB JScript
若要使之成為變化的過期政策(即每次請求頁時都重新設定過期時間),請按以下代碼所示來設定SlidingExpiration 屬性。
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public);Response.Cache.SetSlidingExpiration(true); Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))Response.Cache.SetCacheability(HttpCacheability.Public)Response.Cache.SetSlidingExpiration(True) Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public);Response.Cache.SetSlidingExpiration(true); C# VB JScript
注意:啟用變化的過期後 (SetSlidingExpiration(true)),對原伺服器的請求總是會生成一個響應。在下遊緩存可滿足用戶端請求(緩存中的内容尚未過期)而無須從原伺服器請求内容的情況下,使用變化的過期時間是很有用的。
從 ASP 移植過來的應用程式可能已用 ASP 屬性設定了緩存政策;例如:
Response.CacheControl = "Public";Response.Expires = 60; Response.CacheControl = "Public"Response.Expires = 60 Response.CacheControl = "Public";Response.Expires = 60;C# VB JScript
這些屬性受 ASP.NET 的支援,并且具有同已顯示的其他示例相同的作用。
本節小結
輸出緩存技術緩存由 ASP.NET 頁生成的内容。
除非頁具有有效的過期時間或有效性政策和公共的緩存可見性,否則不将其放入輸出緩存。
本文轉自 netcorner 部落格園部落格,原文連結:http://www.cnblogs.com/netcorner/archive/2007/06/23/2912352.html ,如需轉載請自行聯系原作者