MVC 缓存实践(一)

为什么要讲缓存、缓存到底有什么作用?

下面我们来说一个场景我们有一个首页菜单的布局基本是不会经常发生的变化,如果动态生成的 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)

时间: 2024-10-12 09:25:01

MVC 缓存实践(一)的相关文章

MVC 缓存1

MVC 缓存 为什么要讲缓存.缓存到底有什么作用? 下面我们来说一个场景我们有一个首页菜单的布局基本是不会经常发生的变化,如果动态生成的 Web 页被频繁请求并且构建时需要耗用大量的系统资源,那么,如何才能改进这种情况的响应时间了?于是在这种情况下面缓存就起作用了,这样我们就可以避免频繁的去访问服务器增加服务器的压力.现在我们来MVC 页面缓存,下面我们使用一个简单的例子之前先看一下原理 于是现在我们在分析分析如何的看一个页面是否进行了相应的缓存行为.他里面的参数含义. cache-contro

MVC项目实践,在三层架构下实现SportsStore-01

SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管理.图像上传......是不错的MVC实践项目,但该项目不是放在多层框架下开发的,离真实项目还有一段距离.本系列将尝试在多层框架下实现SportsStore项目,并用自己的方式实现一些功能. 本篇为系列第一篇,包括: ■ 1.搭建项目■ 2.卸载Entity Framework组件,并安装最新版本■ 3.使用

MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

http://www.cnblogs.com/darrenji/p/3809219.html 本篇为系列第一篇,包括: ■ 1.搭建项目■ 2.卸载Entity Framework组件,并安装最新版本■ 3.使用EF Code First创建领域模型和EF上下文■ 4.三层架构设计    □ 4.1 创建DAL层        ※ 4.1.1 MySportsStore.IDAL详解        ※ 4.1.2 MySportsStore.DAL详解 1.搭建项目 MySportsStore.

MVC 缓存

在MVC4中,要启动缓存方法是需要在Action前加上OutputCache特性. 一.如何使用 /// <summary> /// 公司简介 /// </summary> /// <returns></returns> [OutputCache(Duration = 10,Location = OutputCacheLocation.ServerAndClient,VaryByParam = "id")] public ActionRe

MVC缓存

MVC缓存 mvc技术交流,欢迎加群: 一.MVC缓存简介 缓存是将信息(数据或页面)放在内存中以避免频繁的数据库存储或执行整个页面的生命周期,直到缓存的信息过期或依赖变更才再次从数据库中读取数据或重新执行页面的生命周期.在系统优化过程中,缓存是比较普遍的优化做法和见效比较快的做法.MVC缓存本质上还是.NET的一套缓存体系,只不过该缓存体系应用在了MVC框架上.下面的示例把缓存应用在MVC上. 缓存的常用场景: 数据被频繁的使用,并且很少发生变化或对即时性的要求不高. 二.Control缓存

MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层

SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管理.图像上传......是不错的MVC实践项目,但该项目不是放在多层框架下开发的,离真实项目还有一段距离.本系列将尝试在多层框架下实现SportsStore项目,并用自己的方式实现一些功能. 本篇为系列第二篇,包括: ■ 4.三层架构设计    □ 4.2 创建DbSession层 数据访问层的统一入口   

MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等

SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管理.图像上传......是不错的MVC实践项目,但该项目不是放在多层框架下开发的,离真实项目还有一段距离.本系列将尝试在多层框架下实现SportsStore项目,并用自己的方式实现一些功能. 本篇为系列第三篇,包括: ■ 5.自定义Ninject控制器工厂■ 6.项目的第一次运行 5.自定义Ninject控制

MVC项目实践,在三层架构下实现SportsStore-08,部署到IIS服务器

SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管理.图像上传......是不错的MVC实践项目,但该项目不是放在多层框架下开发的,离真实项目还有一段距离.本系列将尝试在多层框架下实现SportsStore项目,并用自己的方式实现一些功能. 本篇为系列第八篇,包括: ■ 10.部署到IIS服务器    □ 10.1 使用Visual Studio发布   

MVC项目实践,在三层架构下实现SportsStore-05,实现导航

SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管理.图像上传......是不错的MVC实践项目,但该项目不是放在多层框架下开发的,离真实项目还有一段距离.本系列将尝试在多层框架下实现SportsStore项目,并用自己的方式实现一些功能. 本篇为系列第五篇,包括: ■ 8.导航 8.导航 创建NavController,派生于BaseController: