頁面輸出快取將完整呈現的 HTML 內容儲存在伺服器記憶體中,後續請求直接輸出快取內容,跳過頁面生命週期,大幅縮短回應時間。適用於資料更新頻率低、但生成成本高的頁面。ASP.NET 2.0 提供兩種設定方式:宣告式的 @OutputCache 指令與程式化的 HttpCachePolicy 類別。
<%@ 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"
%>
| 屬性 | 說明 | 備註 |
|---|---|---|
| Duration | 快取持續秒數(必填) | 設定 HTTP 過期原則,單位為秒 |
| Location | 快取儲存位置 | 預設 Any(客戶端、Proxy、伺服器皆可);用戶控件不支援 |
| VaryByParam | 依查詢字串參數變化快取 | 如 "id" 或 "*"(所有參數);用戶控件需搭配 VaryByControl |
| VaryByControl | 依用戶控件屬性值變化快取 | 僅用戶控件支援;以分號分隔控件 ID |
| VaryByCustom | 自定義快取變化邏輯 | 需在 Global.asax 覆寫 GetVaryByCustomString() |
| VaryByHeader | 依 HTTP 標頭變化快取 | 如 "User-Agent" 區分瀏覽器類型 |
| SqlDependency | SQL 資料庫相依性快取 | 表格變更時自動使快取失效;支援 SQL Server 2005 查詢通知 |
| CacheProfile | 引用 Web.config 中的快取設定檔 | 僅頁面支援;需對應 <outputCacheSettings> 區段 |
| NoStore | 防止敏感資訊被次級儲存 | 相當於 Response.Cache.SetNoStore();用戶控件不支援 |
| Shared | 用戶控件輸出是否可跨頁共享 | 預設 false;僅用戶控件支援 |
SqlDependency="Northwind:Products",當 Products 表異動時自動清除快取。GetVaryByCustomString 依使用者角色、語言等動態產生快取鍵值。Response.Cache 屬性(HttpCachePolicy 實例)動態設定快取原則,適合複雜邏輯判斷。善用頁面輸出快取是提升 ASP.NET 應用程式效能最直接的手段之一,關鍵在於精準設定變化條件,避免提供過時資料。