为什么要讲缓存、缓存到底有什么作用?
下面我们来说一个场景我们有一个首页菜单的布局基本是不会经常发生的变化,如果动态生成的 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)