近日讀Petshop4,講到其中的緩衝方面的內容,其中進程調試裡面的一個畫面,
右邊的內容是一個UserControl, Control中寫有代碼:
<%@ OutputCache Duration="100000" VaryByParam="page;categoryId" %>
頁面使用了Cache,只有當頁面參數Page或者CategoryId改變時,才會中斷頁面緩衝重新載入。即所謂的VaryByParam。
而Duration="100000"表明在100000秒內,頁面被緩衝。
Duration - 被緩衝輸出的內容有效期間是多少秒。在時間超過指定的有效期間後,到期的緩衝內容會刪除,並會在下次使用者請求中重新調用頁面產生緩衝內容。再次的緩衝內容過 100000秒後此過程又會重複。 VaryByParam - 這個屬性是必須的,並且指明查詢字串參數不同使緩衝產生變化。
<%@ OutputCache Duration="100000" VaryByParam="None" %>
VaryByParam參數為None,這意味著不論傳遞的查詢字串參數如何,所返回的頁面內容是相同的。
如果對同一頁面的兩次請求含不同的查詢字串參數,如:
.../PageCachingByParam.aspx?id=12
.../PageCachingByParam.aspx?id=15 ,這應該產生不同的頁面內容,指令應該是
<%@ OutputCache Duration="100000" VaryByParam="id" %>
如果我們指定 VaryByParam 屬性為“*”,緩衝內容會因傳遞的不同查詢字串參數而不同。
網摘具體說明如下:
@ OutputCache指令代碼
<%@ OutputCache CacheProfile =" " NoStore= "True | False" Duration ="#ofseconds" Shared ="True | False" Location ="Any | Client | Downstream | Server | None | ServerandClient " SqlDependency ="database/table name pair | CommandNotification " VaryByControl ="controlname" VaryByCustom ="browser | customstring" VaryByHeader ="headers" VaryByParam ="parametername" %>
如上所示,在@ OutputCache指令中,共包括10個屬性,它們是CacheProfile、NoStore、Duration、Shared、 Location、SqlDependency、VaryByControl、VaryByCustom、VaryByHeader和 VaryByParam。這些屬性將對緩衝時間、快取項目的位置、SQL資料緩衝依賴等各方面進行設定。下面簡要介紹以上屬性的基本概念。
CacheProfile
用於定義與該頁關聯的緩衝設定的名稱。是可選屬性,預設值為空白字元("")。需要注意的是,包含在使用者控制項中的@ OutputCache指令不支援此屬性。在頁面中指定此屬性時,屬性值必須與Web.config檔案<outputCacheSettings>配置節下的outputCacheProfiles元素中的一個可用項的名稱匹配。如果此名稱與設定檔項不匹配,將引發異常。
NoStore
該屬性定義一個布爾值,用於決定是否阻止敏感資訊的二級儲存。需要注意的是,包含在使用者控制項中的@ OutputCache指令不支援此屬性。將此屬性設定為true等效於在請求期間執行代碼“Response.Cache.SetNoStore();”。
Duration
用於設定頁面或者使用者控制項緩衝的時間。單位是秒。通過設定該屬性,能夠為來自對象的HTTP響應建立了一個到期策略,並將自動快取頁面或使用者控制項輸出。需要注意的是,Duration屬性是必需的,否則將會引起分析器錯誤。
Shared
該屬性定義一個布爾值,用於確定使用者控制項輸出是否可以由多個頁共用。預設值為false。注意,包含在ASP.NET頁中的@ OutputCache指令不支援此屬性。
Location
用於指定輸出快取項目的位置。其屬性值是OutputCacheLocation枚舉值,它們是Any、Client、Downstream、None、 Server和ServerAndClient。預設值是Any,表示輸出緩衝可用於所有請求,包括用戶端瀏覽器、Proxy 伺服器或處理請求的伺服器上。需要注意的是,包含在使用者控制項中的@ OutputCache指令不支援此屬性。
SqlDependency
該屬性標識一組資料庫/表名稱對的字串值,頁或控制項的輸出緩衝依賴於這些名稱對。需要注意:SqlCacheDependency類監視輸出緩衝所依賴的資料庫中的表,因此,當更新表中的項時,使用基於表的輪詢將從緩衝中移除這些項。當通知(在SQL Server 2005中)與CommandNotification值一起使用時,最終將使用SqlDependency類向SQL Server 2005伺服器註冊查詢通知。另外,SqlDependency屬性的CommandNotification值僅在ASP.NET頁中有效。控制項只能將基於表的輪詢用於@ OutputCache指令。
VaryByControl
該屬性使用一個分號分隔的字串列表來更改使用者控制項的輸出緩衝。這些字串代表在使用者控制項中聲明的ASP.NET伺服器控制項的ID屬性值。除非已經包含了VaryByParam屬性,否則在@ OutputCache指令中,該屬性是必需的。
VaryByCustom
用於自訂輸出緩衝要求的任意文本。如果賦予該屬性值是browser,緩衝將隨瀏覽器名稱和主要版本資訊的不同而異。如果輸入了自訂字串,則必須在應用程式的Global.asax檔案中重寫HttpApplication.GetVaryByCustomString方法。
VaryByHeader
該屬性中包含由分號分隔的HTTP標題列表,用於使輸出緩衝發生變化。當將該屬性設為多標題時,對於每個指定的標題,輸出緩衝都包含一個請求文檔的不同版本。VaryByHeader屬性在所有HTTP 1.1緩衝中啟用快取項目,而不僅限於ASP.NET緩衝。使用者控制項中的@ OutputCache指令不支援此屬性。
VaryByParam
該屬性定義了一個分號分隔的字串列表,用於使輸出緩衝發生變化。預設情況下,這些字串與用GET方法屬性發送的查詢字串值對應,或與用POST方法發送的參數對應。當將該屬性設定為多參數時,對於每個指定的參數,輸出緩衝都包含一個請求文檔的不同版本。可能的值包括“none”、“*”和任何有效查詢字串或POST參數名稱。值得注意的是,在輸出緩衝ASP.NET頁時,該屬性是必需的。它對於使用者控制項也是必需的,除非已經在使用者控制項的@ OutputCache指令中包含了VaryByControl屬性。如果沒有包含,則會發生分析器錯誤。如果不需要使緩衝內容隨任何指定參數發生變化,則可將該值設為“none”。如果要使輸出緩衝根據所有參數值發生變化,則將屬性設定為“*”。