頁輸出緩衝

來源:互聯網
上載者:User
輸出緩衝是一種功能強大的技術,它通過緩衝從動態網頁產生的內容來提高請求/響應的輸送量。預設情況下啟用輸出緩衝,但不緩衝來自任何給定響應的輸出,除非採取顯式操作使該響應成為可快取的。

若要使響應滿足輸出緩衝的條件,它必須具有有效到期/有效性策略和公用的緩衝可見度。這可通過使用低層級的 OutputCache API 或進階別的 @ OutputCache 指令來實現。 啟用輸出緩衝後,當發出對頁的第一個 GET 請求時建立一個輸出快取項目。隨後的 GET 或 HEAD 請求由該輸出快取項目服務,直到該緩衝請求到期。

輸出緩衝還支援緩衝的 GET 或 POST 成對的名稱和數值的變體。

輸出緩衝遵循頁的到期和有效性策略。如果某頁位於輸出緩衝中,並且有一個到期策略標記指示該頁自緩衝起 60 分鐘後到期,則在 60 分鐘後將該頁從輸出緩衝中移除。如果此後接收到另一個請求,則執行頁代碼,並且可以再次緩衝該頁。這種到期策略稱為絕對到期,即頁在某個確定的時間之前有效。

下面的樣本說明用 @ OutputCache 指令輸出緩衝響應的簡單方法。此樣本僅顯示產生響應的時間。若要查看輸出緩衝的運行情況,請調用該頁並注意產生響應的時間。然後重新整理該頁並注意原來的時間沒有更改,表明輸出緩衝正在為第二個響應服務。

 

VB Outputcache1.aspx

[運行樣本] | [查看原始碼]

下面的指令在響應時啟用輸出緩衝:

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

此指令僅指示頁應緩衝 60 秒,而且頁不隨任何 GET 或 POST 參數改變。在該頁仍被緩衝時接收到的請求由快取服務。60 秒後,從緩衝中移除該頁;將顯式處理下一個請求並再次快取頁面。

當然,在上例中,輸出緩衝幾乎沒有省去任何工作。下面的樣本顯示相同的輸出緩衝技術,但查詢一個資料庫並將結果顯示在網格中。

 

VB Outputcache2.aspx

[運行樣本] | [查看原始碼]

在最後的樣本中,對應用程式做了輕微的修改,使使用者可以有選擇地查詢各個州的作者。此樣本說明如何使用 @ OutputCache 指令的 VaryByParam 屬性,緩衝隨查詢字串中的成對的名稱和數值值變化的請求。

<%@ OutputCache Duration="60" VaryByParam="state" %>

對於資料集中的每個州,都有一個將所需的州作為查詢字串的一部分進行傳遞的連結。應用程式然後構造合適的資料庫查詢,並顯示僅屬於選定州的作者。

注意,當您第一次單擊給定州的連結時,它在頁的底部產生一個新的時間戳記。此後,每當在一分鐘內重新提交對該州的請求時,都會得到原來的時間戳記,表示該請求已被緩衝。

 

VB Outputcache3.aspx

[運行樣本] | [查看原始碼]

應用程式若要更多地控制與緩衝相關的 HTTP 標題,可使用 System.Web.HttpCachePolicy 類提供的功能。下面的樣本顯示等效於上例中使用的頁指令的代碼。


Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));            Response.Cache.SetCacheability(HttpCacheability.Public);            
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))            Response.Cache.SetCacheability(HttpCacheability.Public)            
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));            Response.Cache.SetCacheability(HttpCacheability.Public);            
C# VB JScript  

若要使之成為變化的到期策略(即每次請求頁時都重新設定到期時間),請按以下代碼所示來設定 SlidingExpiration 屬性。

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));            Response.Cache.SetCacheability(HttpCacheability.Public);            Response.Cache.SetSlidingExpiration(true);            
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))            Response.Cache.SetCacheability(HttpCacheability.Public)            Response.Cache.SetSlidingExpiration(True)            
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));            Response.Cache.SetCacheability(HttpCacheability.Public);            Response.Cache.SetSlidingExpiration(true);            
C# VB JScript  

注意:啟用變化的到期後 (SetSlidingExpiration(true)),對原伺服器的請求總是會產生一個響應。在下遊緩衝可滿足用戶端請求(緩衝中的內容尚未到期)而無須從原伺服器請求內容的情況下,使用變化的到期時間是很有用的。

從 ASP 移植過來的應用程式可能已用 ASP 屬性設定了緩衝策略;例如:

Response.CacheControl = "Public";            Response.Expires = 60;            
Response.CacheControl = "Public"            Response.Expires = 60            
Response.CacheControl = "Public";            Response.Expires = 60;            
C# VB JScript  

這些屬性受 ASP.NET 的支援,並且具有同已顯示的其他樣本相同的作用。

本節小結
  1. 輸出緩衝技術緩衝由 ASP.NET 頁產生的內容。
  2. 除非頁具有有效到期時間或有效性策略和公用的緩衝可見度,否則不將其放入輸出緩衝。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.