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();
    }
}


作者:Parry
出处:http://www.cnblogs.com/parry/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

上一篇:Data Connection Dialog (直接调用内置数据源连接对话框)


下一篇:SupeSite标签数据源的处理及页面标签的定义技巧