2013年3月26日 星期二

Caching in MVC

在 MVC 中同樣可以使用 ASP.NET 的網頁輸出快取(Output Caching)來提升網頁的效能。Output Caching 可以控制 controller 中的 action 不必每次被 invoke 時都得執行一次。例如,我們常在controller 的 index 方法中列出資料庫中資料的清單,使用 Output caching 就可以避免重複讀取資料庫中相同的資料。

Output Caching

Enabling Output Caching

OutputCacheAttribute 屬性可以用來快取 controller 中的 method ,也可以快取整個 controller 。

Caching an Action Method

[OutputCache(Duration = 10, VaryByParam = "*")]
public ActionResult CacheTest3()
{
ViewBag.Now = System.DateTime.Now;
ViewBag.Message = "Wellcom to MVC";
return View();
}

底下這二張圖分別是使用與不使用 cache 的回應標頭內容。

這是沒有使用 cache 的回應標頭,Cache-Control=private ,表示不用被快取。

這是有使用 cache 的回應標頭

Caching a Controller

你也可以針對整個 Controller 設定快取,它和 action method 是分開的,像下面這個例子,CacheTest1 的快取是10秒,而整個控制器的快取是20秒。

[OutputCache(Duration = 20, VaryByParam = "*")]
public class CacheController : Controller
{
[OutputCache(Duration = 10, VaryByParam = "*")]
public ActionResult CacheTest1()
{
ViewBag.Now = System.DateTime.Now;
ViewBag.Message = "Wellcom to MVC";
return View();
}

Note

Don't use the page <%@ OutputCache %> directive in an MVC view. This directive is bleeding over from the Web Forms world and should not be used in an ASP.NET MVC application.

Disabling Output Caching

You can disable the caching machanism in web.config

<system.web><caching><outputCache enableOutputCache="false" /></caching></system.web>

Partial Output Cache

response message is intended for a single user and MUST NOT be cached

沒有留言:

張貼留言