為什么要講緩存、緩存到底有什么作用?
下面我們來說一個場景我們有一個首頁菜單的布局基本是不會經常發生的變化,如果動態生成的 Web 頁被頻繁請求並且構建時需要耗用大量的系統資源,那么,如何才能改進這種情況的響應時間了?於是在這種情況下面緩存就起作用了,這樣我們就可以避免頻繁的去訪問服務器增加服務器的壓力。現在我們來MVC 頁面緩存,下面我們使用一個簡單的例子之前先看一下原理
於是現在我們在分析分析如何的看一個頁面是否進行了相應的緩存行為。他里面的參數含義。
cache-control是用於控制網頁的緩存.常見的取值有private、no-cache、max-age、must- revalidate等,默認為private
cache-control
打開新窗口(_blank)
private、no-cache、must-revalidate 再次訪問服務器
Cache-control: max-age=5(表示當訪問此網頁后的5秒內再次訪問不 會去服務器)
在地址欄回車
值為private或must-revalidate則只有第一次訪問時會訪問服務器,以后就不再訪問。
值為no-cache,那么每次都會訪問。
值為max-age,則在過期之前不會重復訪問。
按后退按扭
值為private、must-revalidate、max-age,則不會重訪問,
值為no-cache,則每次都重復訪問
按刷新按扭
無論為何值,都會重復訪問
private max-age=0 表示每次都會去訪問服務器 如果不是0表示緩存設置的時間
建議:
1.對於js和css可以獨立到一個二級域名中,啟用GZIP,且設置較長的過期時間
2.對於圖片獨立到另一個二級域名中,且設置較長的過期時間
對於靜態文件(html)如果長期不更新也可以設置稍長的過期時間(如30天),根據實踐的需要設置更新的時間。
對於動態文件(php)可以設置較短的過期時間(如120秒)
注意:在過期時間內,如果您對文件內容進行了變化,對於用戶或蜘蛛都不能瀏覽或抓取到你更改后的內容。 這也是動態文件設置較短過期時間的主要原因。cache-control的設置只是為了節約搜索引擎蜘蛛資源,讓其抓取更多有效內容,千萬不能弄巧成拙。
如何使用MVC 搭建一個簡單的緩存首先在web 頁面配置一個這個
<caching> <outputCacheSettings> <outputCacheProfiles> <add name="Index" duration="20" enabled="true" location="ServerAndClient" varyByParam="city,type"/> </outputCacheProfiles> </outputCacheSettings> </caching>
然后在Action里面寫加入[OutputCache(CacheProfile = "Index")] 與 Response.Cache.SetOmitVaryStar(true) 這樣就可以實現簡單的緩存了
[OutputCache(CacheProfile = "Index")] public ActionResult Index() { Response.Cache.SetOmitVaryStar(true); ViewBag.Message = "歡迎使用 ASP.NET MVC!"; List<Person> persons=new List<Person> { new Person(){Name="Lin",Age=23}, new Person(){Name ="Zhang",Age=24}, new Person(){Name="Tang",Age = 25} }; JavaScriptSerializer json=new JavaScriptSerializer(); ViewBag.Json = json.Serialize(persons); return View(); }
第一次訪問是這個的。
我們點擊一下F5在觀察一下狀態304
304(未修改)自從上次請求后,請求的網頁未修改過。服務器返回此響應時,不會返回網頁內容。如果網頁自請求者上次請求后再也沒有更改過,您應將服務器配置為返回此響應(稱為 If-Modified-Since HTTP 標頭)。服務器可以告訴 Googlebot 自從上次抓取后網頁沒有變更,進而節省帶寬和開銷。
現在看出了緩存的優點了吧。其實緩存使用的方式有很多.
明天我們將講解一下MVC 里面配置緩存的參數到底是什么樣的。如何能夠很好的使用MVC 設置頁面緩存。
(借鑒 http://www.ggseo.cn/blog/post/cache-control.html)