首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 視圖片段快取(上):起步與核心概念

     編輯:關於ASP.NET

效能優化無過於「快取」。即便所謂「靜態頁」,本質也是整頁快取。但現代 Web 2.0 網站互動頻繁,粒度過大的快取幾乎不可用。例如 Twitter 名人發文,豈能重新生成數十萬用戶的靜態頁?我們需要更細緻的「視圖片段快取」。

從 WebForm 控制項快取到 MVC 標記式快取

ASP.NET WebForm 提供控制項級快取,但最小單元是「控制項」而非任意頁面區塊。筆者早年提出 CachePanel,包裹任意內容皆可快取,效果顯著。然而 MVC 視圖只是模板,無法使用伺服器控制項。

解決之道在於利用 WebForm 強大的視圖引擎,建立脫離後端代碼的「標記」方式。Rails、Django 皆有類似功能,ASP.NET MVC 2.0 尚未內建,我們自行擴充 HtmlHelper:

public static class CacheExtensions
{
    public static string Cache(
        this HtmlHelper htmlHelper,
        string cacheKey,
        CacheDependency cacheDependencies,
        DateTime absoluteExpiration,
        TimeSpan slidingExpiration,
        Func<object> func)
    {
        var cache = htmlHelper.ViewContext.HttpContext.Cache;
        var content = cache.Get(cacheKey) as string;

        if (content == null)
        {
            content = func().ToString();
            cache.Insert(cacheKey, content, cacheDependencies, absoluteExpiration, slidingExpiration);
        }

        return content;
    }
}

這是起點,後續將演進為支援標記語法、捕獲輸出流的完整方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved