OutputCache概念學習
OutputCache屬性詳解(一)
OutputCache屬性詳解(二)
OutputCache屬性詳解(三)
Duration:頁或用戶控件進行緩存的時間(以秒計)。在頁或用戶控件上設置該特性為來自對象的 HTTP 響應建立了一個過期策略,并將自動緩存頁或用戶控件輸出。
CacheProfile:與該頁關聯的緩存設置的名稱。這是可選特性,默認值為空字符串 ("")。
測試OutputCache準備
在Visual Studio中,新建website項目,并修改頁面信息如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <%=DateTime.Now %> </div> </form></body></html>
打開 Fiddler 工具,在瀏覽器中打開頁面,我們可以看到Fiddler 跟蹤到的響應信息如下:
并且每次刷新Fiddler所返回的狀態碼都是200,而且頁面輸出時間在不斷變化,如下:
我們修改項目,在website下的Web.config文件中添加如下配置:
<system.web> <caching> <outputCacheSettings> <outputCacheProfiles> <!--name 緩存配置名稱 duration 緩存的時間(以秒計) enabled 指定緩存有效 --> <add name="outputCache60" duration="60" enabled="true" varyByParam="*" /> </outputCacheProfiles> </outputCacheSettings> </caching> <compilation debug="true"/> </system.web>
并修改頁面信息為,增加 <%@ OutputCache CacheProfile="outputCache60" %>:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><%@ OutputCache CacheProfile="outputCache60" %><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <%=DateTime.Now %> </div> </form></body></html>
同樣利用 Fiddler 跟蹤,得到的信息如下:
我們可以看到 Response Heades 所返回的Cache與不加緩存時返回的完全不一樣(多了 Date 和 Expires 節點),加緩存后的時間范圍與配置文件中時間一致,相差60秒(duration="60")。
加緩存后,第一次數據請求的狀態為200,而之后請求返回的狀態都是304,而且頁面所輸出的時間一直未變。(超過60秒后第一次刷新,時間會變化,且狀態變為200)
HTTP 304: Not Modified客戶端有緩沖的文檔并發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續使用。
分號分隔的字符串列表,用于使輸出緩存發生變化。默認情況下,這些字符串對應于使用 GET 方法特性發送的查詢字符串值,或者使用 POST 方法發送的參數。將該特性設置為多個參數時,對于每個指定參數組合,輸出緩存都包含一個不同版本的請求文檔。
可能的值包括 none、星號 (*) 以及任何有效的查詢字符串或 POST 參數名稱。
varyByParam="none" 當 VaryByParam 設置為 none 時,將不考慮任何參數;無論提供什么附加參數,都將向所有用戶發送相同的頁:
下面是Fiddler跟蹤的信息:
可以看到,參數改變時數據請求都是200(第二次為304),但是頁面上的數據則全是相同的副本,如下:
VaryByParam =“*”對于每個唯一的請求參數組合,將緩存一個唯一頁
如圖中所示,不管所傳的參數為id,code還是para 只要值有所變化時,就會請求服務器,不會讀取緩存數據(需要注意的是資源文件如img,js,CSS等還是會走緩存的)
而且其頁面上的數值也是變化的,如下:
但是,將 VaryByParam 設置為 * 會緩存頁的許多不同版本,所以如果您知道緩存變化所依據的參數,建議您在 VaryByParam 特性中顯式指定這些參數。
如varyByParam="id;code" 或者 varyByParam="id" 表示當 id;code 或者 id 參數變化時,發生給客戶端不同頁。
我這邊配置文件修改為
<add name="outputCache60" duration="60" enabled="true" varyByParam="id;code" />
Fiddler跟蹤的信息如下:
參數改變都會當成一個新的數據請求,但是返回給客戶端的數據則不同,如下:
id和code變化時,輸出內容會隨參數變化,但para無論參數怎么變化,輸出的結果都是一樣的。
該章只是簡單介紹了Duration,CacheProfile,VaryByParam屬性 ,如有錯誤或者問題請各路大神指正!
作者:釋迦苦僧 出處:http://www.49028c.com/woxpp/p/3975209.html本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
新聞熱點
疑難解答