• [转载]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();
    }
    }

    原文地址:http://blog.sina.com.cn/s/blog_55e42da601011lyg.html

  • 相关阅读:
    查看windows以前连过的wifi密码
    winscp可能的替代品?
    查看windows的进程启动参数
    Ubuntu Server 安全补丁、版本升级
    AtCoder Beginner Contest 217 题解
    F. Alice and Recoloring 1&2
    E. Bored Bakry
    C. Bakry and Partitioning
    2021牛客多校 第四场
    AES解密报Given final block not properly padded
  • 原文地址:https://www.cnblogs.com/iack/p/3516554.html
Copyright © 2020-2023  润新知