目錄
Duration與CacheProfile屬性
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頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續使用。
VaryByParam屬性
分號分隔的字符串列表,用於使輸出緩存發生變化。默認情況下,這些字符串對應於使用 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.cnblogs.com/woxpp/p/3975209.html 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。