逐步解說:使用輸出快取功能增強網站效能
更新: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 網頁。
若要建立檔案系統網站
開啟 Visual Web Developer。
在 [檔案] 功能表上,按一下 [新網站] (在 Visual Web Developer Express 版中的 [檔案] 功能表上,按一下 [新增],然後再按 [網站])。
[新網站] 對話方塊隨即出現。
請在 [Visual Studio 安裝的範本] 下方,選取 [ASP.NET 網站]。
在 [位置] 方塊中,輸入您想要用來保存網站頁面的資料夾名稱。
例如,輸入資料夾名稱 C:\WebSites。
在 [語言] 清單中,按一下您想要操作的程式語言。
按一下 [確定]。
Visual Web Developer 會建立資料夾和命名為 Default.aspx 的新頁面。
設定頁面層級的快取
這個程序向您介紹基本網頁快取。在這個程序中,您會將 Label 控制項加入網頁,以顯示網頁建立的時間,並隨後設定要快取的網頁。藉由顯示網頁的建立時間,您便可以看到網頁要求是從快取完成的。
若要設定頁面層級的快取
開啟或切換至 Default.aspx 網頁 (您也可以使用網站上的任何其他網頁)。
切換至 [設計] 檢視。
從 [工具箱] 的 [標準] 群組中,將 Label 控制項拖曳到頁面上,保留預設名稱 Label1。
按兩下網頁的空白。
設計工具便會切換至程式碼編輯器,並建立 Page_Load 方法。
將下列反白顯示的程式碼加入至方法中:
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(); }
按 CTRL+F5 執行頁面。
當網頁出現在瀏覽器中時,您將看到目前的日期和時間。按瀏覽器的 [重新整理] 按鈕,便會發現時間戳記每次都會變更。
關閉瀏覽器。
將下列 @ OutputCache 指示詞加入網頁的最上方:
<%@ OutputCache Duration="15" VaryByParam="none" %>
這個指示詞會設定要快取的網頁。Duration 屬性會指定網頁將在快取中停留 15 秒。
按 CTRL+F5 再次執行此頁。
重新整理網頁數次。
請注意,不論瀏覽器重新整理多少次,時間顯示只會每 15 秒更新一次。這是因為直到持續時間過去才會從快取完成要求,此時會重新執行網頁程式碼。
設定應用程式層級的快取
在前面的程序中,您設定了個別網頁的快取。在某些情況下,您可能想要為網站中的所有網頁設定快取。您可能還想建立不同的快取規則 (設定檔),並將快取設定檔套用至一組個別網頁。設定應用程式層級的快取可讓您從單一組態檔變更快取行為,而不是編輯個別網頁的 @ OutputCache 指示詞。在下列程序中,您將設定簡單快取設定檔,並將其用於剛剛使用的網頁。
若要設定應用程式層級的快取
如果已有 Web.config 檔,請移至步驟 4。
在 [方案總管] 中,以滑鼠右鍵按一下網站名稱,然後再按 [加入新項目]。
在 [加入項目] 對話方塊中,按一下 [Web 組態檔],再按 [加入]。
請確定您使用的名稱為 Web.config。
加入下列 XML,做為 system.web 項目的子項目。
<!-- caching section group --> <caching> <outputCacheSettings> <outputCacheProfiles> <add name="AppCache1" enabled="true" duration="60"/> </outputCacheProfiles> </outputCacheSettings> </caching>
儲存檔案,然後關閉檔案。
開啟或切換至使用的 Web 網頁,然後切換至 [原始碼] 檢視。
變更要讀取的 @ OutputCache 指示詞,如下所示:
<%@ OutputCache CacheProfile="AppCache1" VaryByParam="none" %>
按 CTRL+F5 執行頁面。
重新整理網頁數次。
這次,日期在快取設定檔指定的持續期間內會保持相同,即 60 秒。
使用參數快取
@ OutputCache 指示詞需要您設定 VaryByParam 屬性 (Attribute),在此之前您已將其設為 "none"。VaryByParam 屬性可讓您設定快取,ASP.NET 便可根據參數 (例如,查詢字串、表單張貼值和要求標頭等) 儲存不同版本的網頁。
例如,您可以在網頁中使用快取參數,顯示所選城市的天氣狀況,其中天氣資料每三個小時就會重新整理。在這個案例中,您想要為每個城市快取不同版本的網頁。將快取參數設為依查詢字串參數變更,便可達到此目的。
在下列程序中,您會變更已加入網頁的 Label 控制項,以便使用彩色背景顯示時間。您可以使用 TextBox 控制項輸入色彩名稱,以變更色彩。
當送出網頁時,您輸入的色彩會做為 POST 資料送出,Label 控制項後面的色彩即會變更。當要求新的色彩時 (當網頁包含新的 POST 資料時),會重新產生網頁並更新時間戳記。不過,對相同色彩的後續要求會傳回快取的網頁 (直到已超過持續期間間隔為止)。
若要根據參數快取
開啟或切換至您一直使用的網頁。
切換至 [設計] 檢視。
從 [工具箱] 的 [標準] 群組中,將 TextBox 控制項拖曳到頁面上,並將其 ID 設為 Color。
將 Button 控制項拖曳到頁面上,保留預設名稱 Button1。
將 Button 控制項的 Text 屬性設為「變更色彩」。
按兩下 Button 控制項,以建立 Click 事件處理常式。
在該方法中,加入下列反白顯示的程式碼:
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)); }
將 form 項目的 defaultbutton 屬性 (Attribute) 設定為 "Button1"。
這麼做會造成在按下 ENTER 鍵時叫用 (Invoke) 按鈕的 Click 事件處理式。
以下列版本取代 @ OutputCache 指示詞:
<%@ OutputCache Location="Server" Duration="60" VaryByParam="Color" %>
按 CTRL+F5 執行頁面。
在文字方塊中輸入色彩名稱 (例如,"red" 或 "blue"),然後按一下 [變更色彩]。
ASP.NET 會快取使用您指定之色彩的網頁版本。
重新整理網頁數次。
如果沒有輸入新色彩名稱,日期和時間至少在一分鐘內不會變更,正如 @ OutputCache 指示詞中 Duration 屬性所指定的那樣。
輸入新色彩 (例如,"green" 或 "orchid"),然後送出網頁。
這次,您將看到時間更新為使用新色彩。
後續步驟
這個逐步解說已經說明了快取 ASP.NET Web 網頁的基本概念。您可能還想要查看下面這些其他快取技術:
以程式的方式指定快取,而不使用網頁宣告。例如,在 Page_Load 方法中,您可以存取 HttpCachePolicy 類別 (Class) (透過 Page.Response.Cache),並相應地設定值和行為。
快取資料繫結網頁,這樣就只會在所依賴的資料發生變更時才重新產生它們。如需詳細資訊,請參閱逐步解說:將 ASP.NET 輸出快取功能與 SQL Server 搭配使用。
請參閱
工作
逐步解說:將 ASP.NET 輸出快取功能與 SQL Server 搭配使用