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();
        }
    }
  • 相关阅读:
    基于mybatis的crud demo
    事务的隔离级别
    spring中ioc的实现
    spring中xml配置文件
    spring中AOP的实现
    mybatis框架
    基于Mapreduce的并行Dijkstra算法执行过程分析
    算法技巧:位运算 逻辑运算
    day04_09 while循环03
    day04_08 while循环02
  • 原文地址:https://www.cnblogs.com/parry/p/OutputCache_In_MVC3.html
Copyright © 2011-2022 走看看