ASP.NET 2.0中的頁面輸出快取

iDotNetSpace發表於2008-03-21

ASP.NET 2.0中的頁面輸出快取:點選下載

ASP.NET 2.0中的頁面輸出快取

閱讀次數:

作者:不詳

出處:網上收集

 

 

  靜態頁面全部內容儲存在伺服器記憶體中。當再有請求時,系統將快取中的相關資料直接輸出,直到快取資料過期。這個過程中,快取不需要再次經過頁面處理生命週期。這樣可以縮短請求響應時間,提高應用程式效能。很顯然,頁面輸出快取適用於不需要頻繁更新資料,而佔用大量時間和資源才能編譯生成的頁面。對於那些資料經常更新的頁面,則不適用。預設情況下,ASP.NET 2.0啟用了頁面輸出快取功能,但並不快取任何響應的輸出。開發人員必須通過設定,使得某些頁面的響應成為快取的一部分。

   設定頁面輸出快取可以使用以下兩種方式:一種是使用@ OutputCache指令,另一種是使用頁面輸出快取API@ OutputCache指令曾經在ASP.NET 1.x中出現過,並在ASP.NET 2.0中得到了繼承和增強。頁面輸出快取API主要是指HttpCachePolicy類。

使用@ OutputCache指令

   使用@ OutputCache指令,能夠實現對頁面輸出快取的一般性需要。@ OutputCache指令在ASP.NET頁或者頁中包含的使用者控制元件的頭部宣告。這種方式非常方便,只需幾個簡單的屬性設定,就能夠實現頁面的輸出快取策略。@ OutputCache指令宣告程式碼如下。


@ 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個屬性,它們是CacheProfileNoStoreDurationSharedLocationSqlDependencyVaryByControlVaryByCustomVaryByHeaderVaryByParam。這些屬性將對快取時間、快取項的位置、SQL資料快取依賴等各方面進行設定。下面簡要介紹以上屬性的基本概念。

CacheProfile

   用於定義與該頁關聯的快取設定的名稱。是可選屬性,預設值為空字元("")。需要注意的是,包含在使用者控制元件中的@ OutputCache指令不支援此屬性。在頁面中指定此屬性時,屬性值必須與Web.config檔案<outputCacheSettings>配置節下的outputCacheProfiles元素中的一個可用項的名稱匹配。如果此名稱與配置檔案項不匹配,將引發異常。

NoStore

   該屬性定義一個布林值,用於決定是否阻止敏感資訊的二級儲存。需要注意的是,包含在使用者控制元件中的@ OutputCache指令不支援此屬性。將此屬性設定為true等效於在請求期間執行程式碼“Response.Cache.SetNoStore();”

Duration

   用於設定頁面或者使用者控制元件快取的時間。單位是秒。通過設定該屬性,能夠為來自物件的HTTP響應建立了一個過期策略,並將自動快取頁或使用者控制元件輸出。需要注意的是,Duration屬性是必需的,否則將會引起分析器錯誤。

Shared

   該屬性定義一個布林值,用於確定使用者控制元件輸出是否可以由多個頁共享。預設值為false。注意,包含在ASP.NET頁中的@ OutputCache指令不支援此屬性。

Location

   用於指定輸出快取項的位置。其屬性值是OutputCacheLocation列舉值,它們是AnyClientDownstreamNoneServerServerAndClient。預設值是Any,表示輸出快取可用於所有請求,包括客戶端瀏覽器、代理伺服器或處理請求的伺服器上。需要注意的是,包含在使用者控制元件中的@ 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”。如果要使輸出快取根據所有引數值發生變化,則將屬性設定為“*”

   下面列舉了兩個使用@OutputCache指令的示例程式碼。


使用@ OutputCache的示例程式碼1

%@ OutputCache Duration="100" VaryByParam="none"%

   以上示例是@ OutputCache指令的基本應用,其指示頁面輸出快取的有效期是100秒,並且頁面不隨任何GETPOST引數改變。在該頁仍被快取時接收到的請求由快取資料提供服務。經過100秒後,將從快取中移除該頁資料,並隨後顯式處理下一個請求並再次快取頁。

使用@ OutputCache的示例程式碼2


%@ OutputCache Duration="100" VaryByParam="location;firstname" %


   以上@ OutputCache指令設定頁面輸出快取的有效期是100秒,並且根據查詢字串引數location或者firstname來設定輸出快取。例如,假設客戶端請求是“http://localhost/default.aspx?location=beijing”,那麼該頁面將被作為快取處理。

靜態頁面全部內容儲存在伺服器記憶體中。當再有請求時,系統將快取中的相關資料直接輸出,直到快取資料過期。這個過程中,快取不需要再次經過頁面處理生命週期。這樣可以縮短請求響應時間,提高應用程式效能。很顯然,頁面輸出快取適用於不需要頻繁更新資料,而佔用大量時間和資源才能編譯生成的頁面。對於那些資料經常更新的頁面,則不適用。預設情況下,ASP.NET 2.0啟用了頁面輸出快取功能,但並不快取任何響應的輸出。開發人員必須通過設定,使得某些頁面的響應成為快取的一部分。

   設定頁面輸出快取可以使用以下兩種方式:一種是使用@ OutputCache指令,另一種是使用頁面輸出快取API@ OutputCache指令曾經在ASP.NET 1.x中出現過,並在ASP.NET 2.0中得到了繼承和增強。頁面輸出快取API主要是指HttpCachePolicy類。

 

 

baidu

靜態頁面全部內容儲存在伺服器記憶體中。當再有請求時,系統將快取中的相關資料直接輸出,直到快取資料過期。這個過程中,快取不需要再次經過頁面處理生命週期。這樣可以縮短請求響應時間,提高應用程式效能。很顯然,頁面輸出快取適用於不需要頻繁更新資料,而佔用大量時間和資源才能編譯生成的頁面。對於那些資料經常更新的頁面,則不適用。預設情況下,ASP.NET 2.0啟用了頁面輸出快取功能,但並不快取任何響應的輸出。開發人員必須通過設定,使得某些頁面的響應成為快取的一部分。

   設定頁面輸出快取可以使用以下兩種方式:一種是使用@ OutputCache指令,另一種是使用頁面輸出快取API@ OutputCache指令曾經在ASP.NET 1.x中出現過,並在ASP.NET 2.0中得到了繼承和增強。頁面輸出快取API主要是指HttpCachePolicy類。

使用@ OutputCache指令

   使用@ OutputCache指令,能夠實現對頁面輸出快取的一般性需要。@ OutputCache指令在ASP.NET頁或者頁中包含的使用者控制元件的頭部宣告。這種方式非常方便,只需幾個簡單的屬性設定,就能夠實現頁面的輸出快取策略。@ OutputCache指令宣告程式碼如下。


@ OutputCache指令程式碼

 

使用@ OutputCache指令

   使用@ OutputCache指令,能夠實現對頁面輸出快取的一般性需要。@ OutputCache指令在ASP.NET頁或者頁中包含的使用者控制元件的頭部宣告。這種方式非常方便,只需幾個簡單的屬性設定,就能夠實現頁面的輸出快取策略。@ OutputCache指令宣告程式碼如下。


@ 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個屬性,它們是CacheProfileNoStoreDurationSharedLocationSqlDependencyVaryByControlVaryByCustomVaryByHeaderVaryByParam。這些屬性將對快取時間、快取項的位置、SQL資料快取依賴等各方面進行設定。下面簡要介紹以上屬性的基本概念。

CacheProfile

   用於定義與該頁關聯的快取設定的名稱。是可選屬性,預設值為空字元("")。需要注意的是,包含在使用者控制元件中的@ OutputCache指令不支援此屬性。在頁面中指定此屬性時,屬性值必須與Web.config檔案<outputCacheSettings>配置節下的outputCacheProfiles元素中的一個可用項的名稱匹配。如果此名稱與配置檔案項不匹配,將引發異常。

NoStore

   該屬性定義一個布林值,用於決定是否阻止敏感資訊的二級儲存。需要注意的是,包含在使用者控制元件中的@ OutputCache指令不支援此屬性。將此屬性設定為true等效於在請求期間執行程式碼“Response.Cache.SetNoStore();”

Duration

   用於設定頁面或者使用者控制元件快取的時間。單位是秒。通過設定該屬性,能夠為來自物件的HTTP響應建立了一個過期策略,並將自動快取頁或使用者控制元件輸出。需要注意的是,Duration屬性是必需的,否則將會引起分析器錯誤。

Shared

   該屬性定義一個布林值,用於確定使用者控制元件輸出是否可以由多個頁共享。預設值為false。注意,包含在ASP.NET頁中的@ OutputCache指令不支援此屬性。

Location

   用於指定輸出快取項的位置。其屬性值是OutputCacheLocation列舉值,它們是AnyClientDownstreamNoneServerServerAndClient。預設值是Any,表示輸出快取可用於所有請求,包括客戶端瀏覽器、代理伺服器或處理請求的伺服器上。需要注意的是,包含在使用者控制元件中的@ 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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-214931/,如需轉載,請註明出處,否則將追究法律責任。

相關文章