爲何要講緩存、緩存到底有什麼做用?php
下面咱們來講一個場景咱們有一個首頁菜單的佈局基本是不會常常發生的變化,若是動態生成的 Web 頁被頻繁請求而且構建時須要耗用大量的系統資源,那麼,如何才能改進這種狀況的響應時間了?因而在這種狀況下面緩存就起做用了,這樣咱們就能夠避免頻繁的去訪問服務器增長服務器的壓力。如今咱們來MVC 頁面緩存,下面咱們使用一個簡單的例子以前先看一下原理css
因而如今咱們在分析分析如何的看一個頁面是否進行了相應的緩存行爲。他裏面的參數含義。html
cache-control是用於控制網頁的緩存.常見的取值有private、no-cache、max-age、must- revalidate等,默認爲privateweb
cache-controljson
打開新窗口(_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,則每次都重複訪問post
按刷新按扭
不管爲什麼值,都會重複訪問搜索引擎
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)