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();
        }
    }
    复制代码
  • 相关阅读:
    Python爬取并分析B站最热排行榜,我发现了这些秘密
    Pycharm 实现远程部署和调试,原来这么简单
    《演员请就位2》弹幕的情感倾向分析
    下个十年,Python 的“王者”地位还能保住吗?
    致初学者:如何学好Python这门编程语言?
    用Python爬取英雄联盟(lol)全部皮肤
    Python很慢?Python之父一句话亮了
    Python 国产库推荐之 musicpy
    利用VS Code进行远程开发,就问你香不香?
    包名规范
  • 原文地址:https://www.cnblogs.com/xgbzsc/p/2684974.html
Copyright © 2011-2022 走看看