3.2.3 緩存整個頁面
在一些大型門戶系統中,訪問量特別大,可能每分鍾就會有上千次的訪問。而且通常門戶系統的首頁非常復雜,項目特別多,每一次訪問都需要多次操作數據庫。這對服務器的性能是個很大的考驗。
但是我們發現通常服務器首頁更新的頻率不是非常快。所以,完全可以讓服務器的首頁緩存起來,過一段時間再更新。這樣服務器就不用每次請求都重新讀取數據庫並生成頁面了。
剛好,ASP.NET為我們提供了一個@OutputCache指令,我們只要在需要緩存數據的頁面使用該指令,即可實現對整個頁面進行緩存。 視頻教學:光盤/videos/3/OutputCacheCommand.avi 長度:6分鍾
1. 基礎知識——@OutputCache指令
@OutputCache指令用於以聲明的方式控制ASP.NET頁或頁中包含的用戶控件的輸出緩存策略。格式如下:
- <%@ OutputCache Duration="5" VaryByControl="none" %>
這行語句的意思是無條件地為該頁緩存5秒鍾。
@OutputCache指令的屬性如表3-6所示。
表3-6 @OutputCache指令屬性
![]() |
在@OutputCache指令的所有屬性中,其中Duration和VaryByParam屬性是必選的屬性。
2. 實例描述
為了方便,這里我們就不再模擬一個大型門戶系統了。
我們只在頁面上打印當前時間,並讓頁面每秒鍾刷新一次。這樣的話,每一次刷新打印的時間都會不一樣。
在這個前提下我們將該頁面緩存5秒,如果緩存成功,則5秒內頁面數據不會變化,在第6秒時才更改為新的時間值。
3. 實例應用
【例3-3】緩存整個頁面。
(1) 打開上節使用的項目,創建一個新的Web窗體,命名為OutputCache.aspx。
(2) 編輯該Web窗體,在頁面里添加如下兩行代碼:
- <%=DateTime.Now.ToString() %>
- <script>setTimeout("locationlocation.href=location.href",1000)</script>
第一行在頁面中打印當前時間,第二行使頁面每隔1秒鍾刷新一次。
(3) 在頁面頭部添加緩存代碼如下:
- <%@ OutputCache Duration="5" VaryByControl="none" %>
4. 運行結果
保存所有文件,運行項目。
訪問OutputCache.aspx頁面,結果如圖3-5所示。
![]() |
圖3-5 OutputCache.aspx頁面 |
該頁面將每秒鍾更新一次,但是頁面內容會緩存5次,在第6次訪問的時候更新。
5. 實例分析
源碼解析:
該實例非常簡單,在頁面打印當前時間,並讓頁面每秒鍾刷新一次。然后設置頁面緩存5秒鍾。
其實細心的讀者可能會發現頁面時間每次更新都會跨越6秒,而不是我們想象中的5秒鍾換一個值。這是因為系統計算時間是在第一次訪問開始,到第5次刷新時剛好5秒,所以這次顯示的還是第一次訪問的時間。處理完該次請求,緩存的數據作廢,在第6次刷新(即第7次訪問)的時候頁面才重新生成並緩存頁面。