共用方式為


逐步解說:使用輸出快取功能增強網站效能

更新:2007 年 11 月

效能對於任何 Web 應用程式而言都是很重要的一個方面。減少 Web 伺服器為符合個別請求而必須執行的處理量,可以使回應時間更快、伺服器能夠同時處理的要求更多,並可降低中繼和後端資料系統上的負載。

使 ASP.NET 達到較好效能的一種方法,就是使用輸出快取減少伺服器的工作負載。輸出快取是減少 Web 伺服器回應時間的最佳手段。

通常,當瀏覽器要求 ASP.NET Web 網頁時,ASP.NET 會建立該網頁的執行個體、執行網頁上的所有程式碼、執行資料庫查詢 (如果有的話)、動態地組合網頁,然後將產生的輸出傳送至瀏覽器。輸出快取可讓 ASP.NET 傳送預先處理的網頁複本,而不用為每個要求重複這個程序。這個差異會減少 Web 伺服器執行的處理量,進而增加效能並增強延展性。

逐步解說將說明的工作包括:

  • 快取網頁,可以使用網頁指示詞快取整個網頁輸出 (不論瀏覽器類型為何),也可以使用個別參數或資料。

  • 使用應用程式層級的快取設定檔,這個功能可讓您定義整個應用程式的輸出快取設定。個別網頁可將其自身與 Web.config 檔中包含的設定檔相關聯。這可讓您集中控制快取而無需編輯每個網頁。

  • 根據隨網頁傳送的個別參數進行快取。

必要條件

若要完成這個逐步解說,您必須要有:

  • Visual Web Developer (Visual Studio)。

  • Microsoft .NET Framework 2.0 版。

建立網站

如果您已在 Visual Web Developer 中建立了網站 (請參閱逐步解說:在 Visual Web Developer 中建立基本 Web 網頁),則可使用該網站,並繼續進行這個逐步解說中下一個主題的步驟。否則,依照下列這些步驟建立新的網站和 Web 網頁。

若要建立檔案系統網站

  1. 開啟 Visual Web Developer。

  2. 在 [檔案] 功能表上,按一下 [新網站] (在 Visual Web Developer Express 版中的 [檔案] 功能表上,按一下 [新增],然後再按 [網站])。

    [新網站] 對話方塊隨即出現。

  3. 請在 [Visual Studio 安裝的範本] 下方,選取 [ASP.NET 網站]。

  4. 在 [位置] 方塊中,輸入您想要用來保存網站頁面的資料夾名稱。

    例如,輸入資料夾名稱 C:\WebSites。

  5. 在 [語言] 清單中,按一下您想要操作的程式語言。

  6. 按一下 [確定]。

  7. Visual Web Developer 會建立資料夾和命名為 Default.aspx 的新頁面。

設定頁面層級的快取

這個程序向您介紹基本網頁快取。在這個程序中,您會將 Label 控制項加入網頁,以顯示網頁建立的時間,並隨後設定要快取的網頁。藉由顯示網頁的建立時間,您便可以看到網頁要求是從快取完成的。

若要設定頁面層級的快取

  1. 開啟或切換至 Default.aspx 網頁 (您也可以使用網站上的任何其他網頁)。

  2. 切換至 [設計] 檢視。

  3. 從 [工具箱] 的 [標準] 群組中,將 Label 控制項拖曳到頁面上,保留預設名稱 Label1。

  4. 按兩下網頁的空白。

    設計工具便會切換至程式碼編輯器,並建立 Page_Load 方法。

  5. 將下列反白顯示的程式碼加入至方法中:

    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs)
         Label1.Text = System.DateTime.Now.ToString()
    End Sub
    
    protected void Page_Load(Object sender, System.EventArgs e)
    {
         Label1.Text = System.DateTime.Now.ToString();
    }
    
  6. 按 CTRL+F5 執行頁面。

    當網頁出現在瀏覽器中時,您將看到目前的日期和時間。按瀏覽器的 [重新整理] 按鈕,便會發現時間戳記每次都會變更。

  7. 關閉瀏覽器。

  8. 將下列 @ OutputCache 指示詞加入網頁的最上方:

    <%@ OutputCache Duration="15" VaryByParam="none" %>
    

    這個指示詞會設定要快取的網頁。Duration 屬性會指定網頁將在快取中停留 15 秒。

  9. 按 CTRL+F5 再次執行此頁。

  10. 重新整理網頁數次。

    請注意,不論瀏覽器重新整理多少次,時間顯示只會每 15 秒更新一次。這是因為直到持續時間過去才會從快取完成要求,此時會重新執行網頁程式碼。

設定應用程式層級的快取

在前面的程序中,您設定了個別網頁的快取。在某些情況下,您可能想要為網站中的所有網頁設定快取。您可能還想建立不同的快取規則 (設定檔),並將快取設定檔套用至一組個別網頁。設定應用程式層級的快取可讓您從單一組態檔變更快取行為,而不是編輯個別網頁的 @ OutputCache 指示詞。在下列程序中,您將設定簡單快取設定檔,並將其用於剛剛使用的網頁。

若要設定應用程式層級的快取

  1. 如果已有 Web.config 檔,請移至步驟 4。

  2. 在 [方案總管] 中,以滑鼠右鍵按一下網站名稱,然後再按 [加入新項目]。

  3. 在 [加入項目] 對話方塊中,按一下 [Web 組態檔],再按 [加入]。

    請確定您使用的名稱為 Web.config。

  4. 加入下列 XML,做為 system.web 項目的子項目。

    <!-- caching section group -->
    <caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="AppCache1" enabled="true" duration="60"/>
        </outputCacheProfiles>
    </outputCacheSettings>
    </caching>
    
  5. 儲存檔案,然後關閉檔案。

  6. 開啟或切換至使用的 Web 網頁,然後切換至 [原始碼] 檢視。

  7. 變更要讀取的 @ OutputCache 指示詞,如下所示:

    <%@ OutputCache CacheProfile="AppCache1" VaryByParam="none" %>
    
  8. 按 CTRL+F5 執行頁面。

  9. 重新整理網頁數次。

    這次,日期在快取設定檔指定的持續期間內會保持相同,即 60 秒。

使用參數快取

@ OutputCache 指示詞需要您設定 VaryByParam 屬性 (Attribute),在此之前您已將其設為 "none"。VaryByParam 屬性可讓您設定快取,ASP.NET 便可根據參數 (例如,查詢字串、表單張貼值和要求標頭等) 儲存不同版本的網頁。

例如,您可以在網頁中使用快取參數,顯示所選城市的天氣狀況,其中天氣資料每三個小時就會重新整理。在這個案例中,您想要為每個城市快取不同版本的網頁。將快取參數設為依查詢字串參數變更,便可達到此目的。

在下列程序中,您會變更已加入網頁的 Label 控制項,以便使用彩色背景顯示時間。您可以使用 TextBox 控制項輸入色彩名稱,以變更色彩。

當送出網頁時,您輸入的色彩會做為 POST 資料送出,Label 控制項後面的色彩即會變更。當要求新的色彩時 (當網頁包含新的 POST 資料時),會重新產生網頁並更新時間戳記。不過,對相同色彩的後續要求會傳回快取的網頁 (直到已超過持續期間間隔為止)。

若要根據參數快取

  1. 開啟或切換至您一直使用的網頁。

  2. 切換至 [設計] 檢視。

  3. 從 [工具箱] 的 [標準] 群組中,將 TextBox 控制項拖曳到頁面上,並將其 ID 設為 Color。

  4. Button 控制項拖曳到頁面上,保留預設名稱 Button1。

  5. Button 控制項的 Text 屬性設為「變更色彩」。

    按兩下 Button 控制項,以建立 Click 事件處理常式。

  6. 在該方法中,加入下列反白顯示的程式碼:

    Protected Sub Button1_Click(ByVal sender As Object, _ 
            ByVal e As System.EventArgs) Handles Button1.Click
        Label1.BackColor = _        System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text))
    End Sub
    
    protected void Button1_Click(Object sender, System.EventArgs e)
    {
        Label1.BackColor =         System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text));
    }
    
  7. 將 form 項目的 defaultbutton 屬性 (Attribute) 設定為 "Button1"。

    這麼做會造成在按下 ENTER 鍵時叫用 (Invoke) 按鈕的 Click 事件處理式。

  8. 以下列版本取代 @ OutputCache 指示詞:

    <%@ OutputCache Location="Server" Duration="60" VaryByParam="Color" %>
    
  9. 按 CTRL+F5 執行頁面。

  10. 在文字方塊中輸入色彩名稱 (例如,"red" 或 "blue"),然後按一下 [變更色彩]。

    ASP.NET 會快取使用您指定之色彩的網頁版本。

  11. 重新整理網頁數次。

    如果沒有輸入新色彩名稱,日期和時間至少在一分鐘內不會變更,正如 @ OutputCache 指示詞中 Duration 屬性所指定的那樣。

  12. 輸入新色彩 (例如,"green" 或 "orchid"),然後送出網頁。

    這次,您將看到時間更新為使用新色彩。

後續步驟

這個逐步解說已經說明了快取 ASP.NET Web 網頁的基本概念。您可能還想要查看下面這些其他快取技術:

請參閱

工作

逐步解說:將 ASP.NET 輸出快取功能與 SQL Server 搭配使用

概念

ASP.NET 快取概觀

參考

@ OutputCache

HttpCachePolicy

VaryByParams