緩存1、Asp.net頁面緩存

本篇文章是我的對Asp.net緩存的理解,在寫文章中過程當中參考瞭如下博文:html

http://www.cnblogs.com/fish-li/archive/2012/01/11/2320027.html#_labelStart面試

http://www.cnblogs.com/haiyabtx/archive/2012/11/18/2776462.html數據庫

 

相信你們在面試時,常常被問到的問題就是如何提升程序性能?有用過緩存嗎?緩存有哪些實現?等等…在數據驅動的Web開發中,常常要重複從數據庫中執行查詢獲取數據,這種重複增長了服務器、數據庫、及網絡負載。經過緩存能夠解決這些問題,提升訪問速度和效率。本篇文檔主要討論的是Asp.net中讓瀏覽器端實現Cache緩存。後面在學習和整理服務器端緩存對象Cache、自定義緩存(靜態、字典等)、Memcached,待整理後再發布博文與你們討論。瀏覽器

 

頁面全局緩存 緩存

本例很簡單,就是在MVC默認工程結構下建立了MyCacheController和Index頁面,在index頁面上按F5時輸出當前時間。工程結構以下圖服務器

Index.cshtml頁面代碼 網絡

@{

ViewBag.Title = "Index"; 

}

<h2>Index</h2>

當前時間:@DateTime.Now.ToString("HH:mm:ss.ffff") 

 

MyCacheController.cs代碼併發

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace CacheMvc.Controllers { public class MyCacheController : Controller { public ActionResult Index() { return View(); } } }

默認不設置頁面緩存,用Fiddler查看Header請求狀況,InspectorsàHeaders中可查看到,Cache顯示的 Cache-Control:private,意思是當前頁面是沒有緩存的。因此這個時間頁面每按一次F5就進行請求一次服務器,而且顯示當前最新時間。性能

 

 

修改代碼,設置爲客戶端瀏覽器緩存10秒學習

        [OutputCache(Duration=10)]
        public ActionResult Index()
        {
            return View();
        }

 

Fiddler查看Header請求狀況,InspectorsàHeaders中可查看到,在設置爲頁面緩存後能夠看到Cache 的顯示結果改變了Cache-Control:public,max-age=10。這時客戶端瀏覽器對此頁面進行了緩存。與上圖中顯示的Private是不同的。這時再按F5進行頁面刷新,Http返回的狀態爲304,且下圖中④處Entity顯示爲 Last-Modified:Tue,31Mar 2015 08:36:35GMT,證實此時刷新頁面瀏覽器並無去請求服務器端,而是顯示的上一次緩存內容。

HTTP 304 狀態的標準解釋是:Not Modified 客戶端有緩衝的文檔併發出了一個條件性的請求(通常是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩衝的文檔還能夠繼續使用。

 

這樣只須要在後臺代碼中加入一句[OutputCache(Duration=10)]就實現了客戶端頁面緩存10秒,實現很簡單吧,經過上面的實例咱們能夠驗證的結果是,用戶發出請求指令時,若是被請求的頁面有緩存且沒過時,則瀏覽器不會發起至服務器的請求,而是直接顯示緩存頁。這樣能夠有效的減小對服務器的請求,從而提高效率。

具體在實際應用中,好比查看當前登陸用戶的積分、等級不須要實時刷新的頁面能夠進行緩存。

相關文章
相關標籤/搜索