麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

ASP.NET頁面緩存

2019-11-14 14:23:14
字體:
供稿:網(wǎng)友

靜態(tài)頁面全部內(nèi)容保存在服務(wù)器內(nèi)存中。當(dāng)再有請求時,系統(tǒng)將緩存中的相關(guān)數(shù)據(jù)直接輸出,直到緩存數(shù)據(jù)過期。這個過程中,緩存不需要再次經(jīng)過頁面處理生命周期。這樣可以縮短請求響應(yīng)時間,提高應(yīng)用程序性能。很顯然,頁面輸出緩存適用于不需要頻繁更新數(shù)據(jù),而占用大量時間和資源才能編譯生成的頁面。對于那些數(shù)據(jù)經(jīng)常更新的頁面,則不適用。默認(rèn)情況下,asp.net 2.0啟用了頁面輸出緩存功能,但并不緩存任何響應(yīng)的輸出。開發(fā)人員必須通過設(shè)置,使得某些頁面的響應(yīng)成為緩存的一部分。

  設(shè)置頁面輸出緩存可以使用以下兩種方式:一種是使用@ OutputCache指令,另一種是使用頁面輸出緩存API。@ OutputCache指令曾經(jīng)在ASP.NET 1.x中出現(xiàn)過,并在ASP.NET 2.0中得到了繼承和增強。頁面輸出緩存API主要是指HttpCachePolicy類。

  使用@ OutputCache指令

  使用@ OutputCache指令,能夠?qū)崿F(xiàn)對頁面輸出緩存的一般性需要。@ OutputCache指令在ASP.NET頁或者頁中包含的用戶控件的頭部聲明。這種方式非常方便,只需幾個簡單的屬性設(shè)置,就能夠?qū)崿F(xiàn)頁面的輸出緩存策略。@ OutputCache指令聲明代碼如下。


@ OutputCache指令代碼


<%@ OutputCache CacheNoStore="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數(shù)據(jù)緩存依賴等各方面進(jìn)行設(shè)置。下面簡要介紹以上屬性的基本概念。

   CacheProfile

  用于定義與該頁關(guān)聯(lián)的緩存設(shè)置的名稱。是可選屬性,默認(rèn)值為空字符("")。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。在頁面中指定此屬性時,屬性值必須與Web.config文件<o(jì)utputCacheSettings>配置節(jié)下的outputCacheProfiles元素中的一個可用項的名稱匹配。如果此名稱與配置文件項不匹配,將引發(fā)異常。

   NoStore

  該屬性定義一個布爾值,用于決定是否阻止敏感信息的二級存儲。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。將此屬性設(shè)置為true等效于在請求期間執(zhí)行代碼“Response.Cache.SetNoStore();”。

   Duration

  用于設(shè)置頁面或者用戶控件緩存的時間。單位是秒。通過設(shè)置該屬性,能夠為來自對象的HTTP響應(yīng)建立了一個過期策略,并將自動緩存頁或用戶控件輸出。需要注意的是,Duration屬性是必需的,否則將會引起分析器錯誤。

   Shared

  該屬性定義一個布爾值,用于確定用戶控件輸出是否可以由多個頁共享。默認(rèn)值為false。注意,包含在ASP.NET頁中的@ OutputCache指令不支持此屬性。

   Location

  用于指定輸出緩存項的位置。其屬性值是OutputCacheLocation枚舉值,它們是Any、Client、Downstream、None、Server和ServerAndClient。默認(rèn)值是Any,表示輸出緩存可用于所有請求,包括客戶端瀏覽器、代理服務(wù)器或處理請求的服務(wù)器上。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。

   SqlDependency

  該屬性標(biāo)識一組數(shù)據(jù)庫/表名稱對的字符串值,頁或控件的輸出緩存依賴于這些名稱對。需要注意:SqlCacheDependency類監(jiān)視輸出緩存所依賴的數(shù)據(jù)庫中的表,因此,當(dāng)更新表中的項時,使用基于表的輪詢將從緩存中移除這些項。當(dāng)通知(在SQL Server 2005中)與CommandNotification值一起使用時,最終將使用SqlDependency類向SQL Server 2005服務(wù)器注冊查詢通知。另外,SqlDependency屬性的CommandNotification值僅在ASP.NET頁中有效。控件只能將基于表的輪詢用于@ OutputCache指令。

   VaryByControl

  該屬性使用一個分號分隔的字符串列表來更改用戶控件的輸出緩存。這些字符串代表在用戶控件中聲明的ASP.NET服務(wù)器控件的ID屬性值。除非已經(jīng)包含了VaryByParam屬性,否則在@ OutputCache指令中,該屬性是必需的。

   VaryByCustom

  用于自定義輸出緩存要求的任意文本。如果賦予該屬性值是browser,緩存將隨瀏覽器名稱和主要版本信息的不同而異。如果輸入了自定義字符串,則必須在應(yīng)用程序的Global.asax文件中重寫Httpapplication.GetVaryByCustomString方法。

   VaryByHeader

  該屬性中包含由分號分隔的HTTP標(biāo)頭列表,用于使輸出緩存發(fā)生變化。當(dāng)將該屬性設(shè)為多標(biāo)頭時,對于每個指定的標(biāo)頭,輸出緩存都包含一個請求文檔的不同版本。VaryByHeader屬性在所有HTTP 1.1緩存中啟用緩存項,而不僅限于ASP.NET緩存。用戶控件中的@ OutputCache指令不支持此屬性。

   VaryByParam

  該屬性定義了一個分號分隔的字符串列表,用于使輸出緩存發(fā)生變化。默認(rèn)情況下,這些字符串與用GET方法屬性發(fā)送的查詢字符串值對應(yīng),或與用POST方法發(fā)送的參數(shù)對應(yīng)。當(dāng)將該屬性設(shè)置為多參數(shù)時,對于每個指定的參數(shù),輸出緩存都包含一個請求文檔的不同版本。可能的值包括“none”、“*”和任何有效的查詢字符串或POST參數(shù)名稱。值得注意的是,在輸出緩存ASP.NET頁時,該屬性是必需的。它對于用戶控件也是必需的,除非已經(jīng)在用戶控件的@ OutputCache指令中包含了VaryByControl屬性。如果沒有包含,則會發(fā)生分析器錯誤。如果不需要使緩存內(nèi)容隨任何指定參數(shù)發(fā)生變化,則可將該值設(shè)為“none”。如果要使輸出緩存根據(jù)所有參數(shù)值發(fā)生變化,則將屬性設(shè)置為“*”。

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


使用@ OutputCache的示例代碼1


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


  以上示例是@ OutputCache指令的基本應(yīng)用,其指示頁面輸出緩存的有效期是100秒,并且頁面不隨任何GET或POST參數(shù)改變。在該頁仍被緩存時接收到的請求由緩存數(shù)據(jù)提供服務(wù)。經(jīng)過100秒后,將從緩存中移除該頁數(shù)據(jù),并隨后顯式處理下一個請求并再次緩存頁。


使用@ OutputCache的示例代碼2


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


  以上@ OutputCache指令設(shè)置頁面輸出緩存的有效期是100秒,并且根據(jù)查詢字符串參數(shù)location或者firstname來設(shè)置輸出緩存。例如,假設(shè)客戶端請求是“http://localhost/default.aspx?location=beijing”,那么該頁面將被作為緩存處理。

  使用頁面輸出緩存API

  上文介紹了使用@ OutputCache指令實現(xiàn)對于輸出緩存的各項設(shè)置。這種方法簡單易行,深得開發(fā)人員青睞。另外,ASP.NET 2.0還從ASP.NET 1.x中繼承和擴(kuò)展了一種使用輸出緩存API來編程設(shè)置頁面輸出緩存的方法。該方法的核心是調(diào)用System.Web.HttpCachePolicy。該類主要包含用于設(shè)置緩存特定的HTTP標(biāo)頭的方法和用于控制ASP.NET頁面輸出緩存的方法。與.NET Framework 1.x中的HttpCachePolicy類相比,.NET Framework 2.0中的HttpCachePolicy類得到了擴(kuò)充和發(fā)展。主要是增加了一些重要方法,例如,SetOmitVarStar方法等。由于HttpCachePolicy類方法眾多,下面簡要說明一些常用方法。

   SetExpires方法

  用于設(shè)置緩存過期的絕對時間。它的參數(shù)是一個DataTime類的實例,表示過期的絕對時間。

   SetLastModified方法

  用于設(shè)置頁面的Last-Modified HTTP標(biāo)頭。Last-Modified HTTP標(biāo)頭表示頁面上次修改時間,緩存將依靠它來進(jìn)行計時。如果違反了緩存限制層次結(jié)構(gòu),此方法將失敗。該方法的參數(shù)是一個DataTime類的實例。

   SetSlidingExpiration方法

  該方法將緩存過期從絕對時間設(shè)置為可調(diào)時間。其參數(shù)是一個布爾值。當(dāng)參數(shù)為true時,Cache-Control HTTP標(biāo)頭將隨每個響應(yīng)而更新。此過期模式與相對于當(dāng)前時間將過期標(biāo)頭添加到所有輸出集的IIS配置選項相同。當(dāng)參數(shù)為false時,將保留該設(shè)置,且任何啟用可調(diào)整過期的嘗試都將靜態(tài)失敗。此方法不直接映射到HTTP標(biāo)頭。它由后續(xù)模塊或輔助請求來設(shè)置源服務(wù)器緩存策略。

   SetOmitVaryStar方法

  ASP.NET 2.0新增的方法。用于指定在按參數(shù)進(jìn)行區(qū)分時,響應(yīng)是否應(yīng)該包含vary:*標(biāo)頭。方法參數(shù)是一個布爾值,若要指示HttpCachePolicy不對其VaryByHeaders屬性使用*值,則為true;否則為false。

   SetCacheability方法

  用于設(shè)置頁面的Cache-Control HTTP標(biāo)頭。該標(biāo)頭用于控制在網(wǎng)絡(luò)上緩存文檔的方式。該方法有兩種重載方式,所不同的是參數(shù)。一種重載方法的參數(shù)是HttpCacheability枚舉值,包括NoCache、Private、Public、Server、ServerAndNoCache和ServerAndPrivate(有關(guān)這些枚舉值的定義,可參考MSDN)。另一種方法的參數(shù)有兩個,一個參數(shù)是HttpCacheability枚舉值,另一個參數(shù)是字符串,表示添加到標(biāo)頭的緩存控制擴(kuò)展。需要注意的是,僅當(dāng)與Private或NoCache指令一起使用時,字段擴(kuò)展名才有效。如果組合不兼容的指令和擴(kuò)展,則此方法將引發(fā)無效參數(shù)異常。

  下面舉例說明頁面緩存API的HttpCachePolicy類的使用方法。


HttpCachePolicy類示例源代碼

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetExpires(DateTime.Parse("6:00:00PM"));


  Response類的Cache屬性用于獲取頁面緩存策略。該屬性的數(shù)據(jù)類型是HttpCachePolicy。可通過調(diào)用Response.Cache來獲取HttpCachePolicy實例,進(jìn)而實現(xiàn)對于當(dāng)前頁面輸出緩存的設(shè)置。如上代碼所示,第一行代碼表示輸出緩存時間是60秒,并且頁面不隨任何GET或POST參數(shù)改變,等同于“<%@ OutputCache Duration="60" VaryByParam="none" %>”。第二行代碼設(shè)置緩存過期的絕對時間是當(dāng)日下午6時整。

  頁面輸出緩存應(yīng)用

  以上兩小節(jié)分別介紹了使用@ OutputCache指令和API設(shè)置頁面輸出緩存功能的內(nèi)容。實際上,兩種方法各有優(yōu)點,使用@ OutputCache指令方法比較簡潔,但靈活性較差。使用API方法,能夠在運行時動態(tài)地修改緩存配置,處理更多的復(fù)雜需求。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 666sao | 欧美一级理论 | 欧美日韩国产一区二区三区在线观看 | 一级做a爱片性色毛片高清 国产精品色在线网站 | 亚洲aⅴ免费在线观看 | 午夜精品久久久久久久久久久久久蜜桃 | 成人免费网站在线观看视频 | 一区二区三区日韩电影 | 久久久久久久久久一本门道91 | 欧美日韩一区,二区,三区,久久精品 | 亚洲精品a级 | 国产午夜精品在线 | 国产精品.com | 国产在线久| 一区二区三区欧美在线观看 | 视频国产一区二区 | 久久久国产精品视频 | 精品一区二区视频在线观看 | 国产高潮失禁喷水爽到抽搐视频 | 国产精品99久久免费观看 | 91精品国产综合久久婷婷香蕉 | 成人在线免费观看小视频 | 玖草在线资源 | 12av电影 | h色网站在线观看 | 黄色成人av在线 | 欧美一级淫片免费播放口 | 亚洲第一成人在线观看 | 国产一级毛片国产 | 成年人毛片视频 | 亚洲情视频 | 午夜视频在线免费 | 国产成人在线网站 | 美国av免费看 | 午夜视频国产 | 日韩精品一二三 | 精品久久久久久综合日本 | 欧美日韩免费在线观看视频 | 国产精品久久久久久久久久久天堂 | 久久久久久久久日本理论电影 | 国产精品成人一区二区三区电影毛片 |