适当的使用缓存对一个网站性能的提升是不言而喻的,今天就让我们看看在 ASP.NET MVC 3 中输出缓存,同ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩类似,在 ASP.NET MVC 3 中输出缓存时在要设置缓存的 Action 上加添加[OutputCache]即可。
比如在东奎博客中 RecentArticle() 得到最新发表的10篇文章,设置缓存方法如下:
[ChildActionOnly]
[OutputCache(Duration = 60 * 10, VaryByParam = "none")]
public ActionResult RecentArticle()
{
return PartialView("RecentArticle",
db.Articles.OrderByDescending(m => m.ID).Take(10)
);
}
上边的代码块返回 PartialView RecentArticle,缓存时间设置为10分钟,关于局部视图(分部视图?可见不翻译最好)就不多说了。VaryByParm 的意思从词组就可以理解,“通过参数名变化”,分别可设置为“none”、“指定的参数名”和“*”。“none” 表示一直缓存同样的内容,其他的就不难理解了。
通过上边的设置,在10分钟内,当用户刷新页面、浏览其它文章等操作时不会再次调用 Controller 中的 RecentArticle(),减少了不必要的数据库请求,提高了网站的运行效率。
我们可以在 Web.config 文件里设置缓存,这样做的好处是可以快速更改缓存时间、避免缓存名冲突等。如下:
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="home" duration="60" varyByParam="none" />
<!--more-->
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
使用如下:
[OutputCache(CacheProfile="home",VaryByParam="id")]
public ActionResult Index(string id)
{
return View();
}
这种方法在child actions 会报“Duration must be a positive number”的错误,如在“RecentArticle()”上使用。查看 ASP.NET MVC 3 的源代码可以发现在处理 child actions 时 CacheProfile 属性是被忽略且无效的,可见这里抛出的异常描述不太准确。
关于静态内容的缓存在本文不再做介绍,如图片、CSS、和 JS 文件的缓存,如果你不清楚的话,可以参考下 IIS7 中设置浏览器缓存这篇文章。在 ASP.NET MVC 3 中设置缓存变得简单且灵活,通过在 ASP.NET MVC 3 设置缓存,相信我们的网站在性能上又上升了一个台阶。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。