zoukankan      html  css  js  c++  java
  • MVC3缓存:使用页面缓存

    在以前的WebForm的开发中,在页面的头部加上OutputCache即可启用页面缓存,而在MVC3中,使用了Razor模板引擎的话,该如何使用页面缓存呢?
    如何启用

    在MVC3中要如果要启用页面缓存,在页面对应的Action前面加上一个OutputCache属性即可。

    我们建一个Demo来测试一下,在此Demo中,在View的Home目录下的Index.cshtml中让页面输入当前的时间。

    @{
    Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
    <title>Index</title>
    </head>
    <body>
    <div>
    <h2>
    现在时间:@DateTime.Now.ToString("T")</h2>
    </div>
    </body>
    </html>


    在Controllers中添加对应的Action,并加上OutputCache属性。

    [HandleError]
    public class HomeController : Controller
    {
    [OutputCache(Duration = 5, VaryByParam = "none")]
    public ActionResult Index()
    {
    return View();
    }
    }


    刷新页面即可看到页面做了一个10秒的缓存。当页面中数据不是需要实时的呈现给用户时,这样的页面缓存可以减小实时地对数据处理和请求,当然这是针对整个页面做的缓存,缓存的粒度还是比较粗的。
    缓存的位置

    可以通过设置缓存的Location属性,决定将缓存放置在何处。

    Location可以设置的属性如下:
    · Any
    · Client
    · Downstream
    · Server
    · None
    · ServerAndClient

    Location的默认值为Any。一般推荐将用户侧的信息存储在Client端,一些公用的信息存储在Server端。

    加上Location应该像这样。

    [HandleError]
    public class HomeController : Controller
    {
    [OutputCache(Duration = 5, VaryByParam = "none", Location = OutputCacheLocation.Client, NoStore = true)]
    public ActionResult Index()
    {
    return View();
    }
    }

    缓存依赖

    VaryByParam可以对缓存设置缓存依赖条件,如一个产品详细页面,可能就是根据产品ID进行缓存页面。

    缓存依赖应该设置成下面这样。

    在MVC3中对输出缓存进行了改进,OutputCache不需要手动指定VaryByParam,会自动使用Action的参数作为缓存过期条件。(感谢”散客游“提醒)

    [HandleError]
    public class HomeController : Controller
    {
    [OutputCache(Duration = int.MaxValue, VaryByParam = "id")]
    public ActionResult Index()
    {
    return View();
    }
    }

    另一种通用的设置方法

    当我们需要对多个Action进行统一的设置时,可以在web.config文件中统一配置后进行应用即可。

    在web.config中配置下Caching节点

    <caching>
    <outputCacheSettings>
    <outputCacheProfiles>
    <add name="Cache1Hour" duration="3600" varyByParam="none"/>
    </outputCacheProfiles>
    </outputCacheSettings>

    </caching>


    那么在Action上使用该配置节点即可,这样的方法对于统一管理配置信息比较方便。

    [HandleError]
    public class HomeController : Controller
    {
    [OutputCache(CacheProfile = "Cache1Hour")]
    public ActionResult Index()
    {
    return View();
    }
    }

  • 相关阅读:
    dubbo
    Executer invokeAll
    java并发编程实战 java并发编程的艺术 阅读随笔
    小程序如何获取指定类名高度
    一些好用的Swift三方框架
    微信小程序checkbox多选传多个参数的操作
    关于xcode出现An unknown error occurred. See the install log for more details安装失败解决办法
    iOS 针对于13.0和暗黑模式出现的适配问题
    iOS UITextField如何禁止输入表情及特殊字符
    判断iPhoneX适配问题
  • 原文地址:https://www.cnblogs.com/kezhiping/p/3425491.html
Copyright © 2011-2022 走看看