|
原文鏈接:http://www.cnblogs.com/netatomy/articles/extensible-output-caching-with-asp-net-4-vs-2010-and-net-4-0-series.html 今天介紹 ASP.NET 4 中的輸出緩存擴(kuò)展能力改進(jìn)??梢杂糜谒械?ASP.NET 4 應(yīng)用程序,包括 ASP.NET Web Forms 和 ASP.NET MVC。 目前的輸出緩存ASP.NET 1.0 就引入了輸出緩存的概念,它讓開發(fā)人員能夠捕獲并在內(nèi)存緩存中存儲頁面、控件、控制器和 HTTP 響應(yīng)產(chǎn)生的輸出。在隨后的請求中,ASP.NET 就能夠通過從緩存產(chǎn)生的內(nèi)容而不是執(zhí)行頁面/控制器重新生成輸出,從而運(yùn)行的更快。這可以顯著地提高應(yīng)用程序的性能——尤其在內(nèi)容是基于數(shù)據(jù)庫中數(shù)據(jù)的情況下(因為內(nèi)容是輸出緩存的,不必為隨后的請求去訪問數(shù)據(jù)庫了)。 ASP.NET 輸出緩存系統(tǒng)非常靈活,足夠讓你能夠根據(jù)傳給頁面/控制器的查詢字符串/表單提交參數(shù)緩存不同版本的內(nèi)容(例如,Browse.aspx?category=Beverages 和 Browse.aspx?category=Meat)。它還讓你能夠基于瀏覽器類型或客戶端的用戶語言偏好緩存不同版本的內(nèi)容。這允許你緩存移動版本的頁面,它和為桌面瀏覽器優(yōu)化的頁面是互相隔離的,以及根據(jù)用戶是否想以英語還是法語閱讀頁面來緩存來改變不同的緩存條目。你可以配置 ASP.NET 為特定的輸出緩存條目指定專門的時間周期(例如,1分鐘,超過這個時間下一個請求會重新產(chǎn)生內(nèi)容并再次緩存)。你還可以配置 ASP.NET 根據(jù)外部事件(例如:緩存的內(nèi)容在數(shù)據(jù)庫中改變了)動態(tài)的讓緩存條目失效。 ASP.NET v1 -> v3.5 輸出緩存的一個限制就是,緩存存儲本身是不可擴(kuò)展的,即緩存內(nèi)容總是要存儲在即時內(nèi)存中。 ASP.NET 4 輸出緩存可擴(kuò)展能力ASP.NET 4 為輸出緩存增加了可擴(kuò)展能力,現(xiàn)在使開發(fā)人員能夠配置一種或多種自定義的輸出緩存提供程序。輸出緩存提供程序能夠使用任何一種存儲機(jī)制來持久化輸出緩存。這使得使用任何持久機(jī)制輕松地創(chuàng)建輸出緩存提供程序成為可能,包括本地或遠(yuǎn)程磁盤、數(shù)據(jù)庫、云存儲和分布式緩存引擎(像memcached或velocity)。 你能夠通過派生 ASP.NET 4 新的 System.Web.Caching.OutputCacheProvider 類的子類來創(chuàng)建自定義輸出緩存提供程序。在派生類中要重寫 4 個公共方法,提供添加/移除/獲取/更新緩存內(nèi)容的實現(xiàn)(唯一鍵會傳遞進(jìn)去來標(biāo)識每個單獨(dú)的緩存條目)。然后就可以配置 ASP.NET 通過在應(yīng)用程序的 Web.config 文件中的 <provider> 元素新的子節(jié) <providers> 中注冊來使用自定義輸出緩存提供程序:
上面我添加了一個新的輸出緩存提供程序(稱為“SampleCache”),它使用了 OutputCacheSample.dll 程序集中的 "ScottOutputCache" 類實現(xiàn)。我還配置了 ASP.NET 把我的 "SampleCache" 實現(xiàn)作為輸出緩存的默認(rèn)實現(xiàn)——這是通過設(shè)置 <outputCache> 元素的 "defaultProvider" 屬性完成的。 現(xiàn)在,當(dāng)我在任何 .aspx 頁面頂端添加 OutputCache 指令的時候,內(nèi)容將會使用 ScottOutputCache 提供程序緩存和存儲: <%@ OutputCache Duration="60" VaryByParam="None" %> 同樣,如果我在 ASP.NET MVC 控制器內(nèi)部的動作方法上添加一個 [OutputCache] 特性,內(nèi)容也將會使用我的 ScottOutputCache 提供程序緩存并存儲內(nèi)容:
定制使用哪一個輸出緩存提供程序上面我配置了 ASP.NET 讓它在應(yīng)用程序中無論何時使用輸出緩存,默認(rèn)總是使用我的 "SampleCache" 提供程序緩存內(nèi)容。 作為稍微更加高級的選項,開發(fā)人員還能夠配置 ASP.NET 在每個請求基本原理(per-request basis)上動態(tài)地選擇使用哪個輸出緩存提供程序。這對哪些想要擁有更加豐富緩存語義的場景來說非常有用。例如,你可能想使用內(nèi)置的 ASP.NET 即時內(nèi)存提供程序緩存站點(diǎn)的主頁或最常請求的“前十”頁面(因為內(nèi)容在即時內(nèi)存中所以超級快),而把較少請求的頁面緩存在磁盤上。 你能夠動態(tài)地在每請求原理上指示使用哪個輸出緩存提供程序,這要在應(yīng)用程序的 Global.asax 文件內(nèi)部重寫 GetOutputCacheProviderName() 方法。下面我會指示在我的應(yīng)用程序內(nèi)部為 "Home.aspx" 頁面使用內(nèi)置的即時內(nèi)存的ASP.NET輸出緩存提供程序,而對其他所有請求使用在Web.config文件中注冊的提供程序:
這種根據(jù)場景在提供程序之間切換的能力為各種強(qiáng)大的場景提供了有力支持。 通用的輸出緩存提供程序我們將提供一些示例,演示如何實現(xiàn)一個基于磁盤的輸出緩存提供程序,它在文件系統(tǒng)中存儲緩存的內(nèi)容。我們還將提供示例,演示如何把新的 Windows Server AppFabric Caching Service (曾經(jīng)叫做 "Velocity")集成到輸出緩存。AppFabric的緩存服務(wù)將會是一個免費(fèi)的、完全支持的微軟分布式緩存系統(tǒng)。當(dāng)然也能夠用流行的開源分布式緩存系統(tǒng) memcached 實現(xiàn)新的 ASP.NET 4輸出緩存。 你可以通過觀看 Stefan Schackow 的 ASP.NET 4 Core Runtime talk at PDC 2009 來學(xué)習(xí)更多關(guān)于創(chuàng)建提供程序的知識。你還可以從 this PDC 2009 talk 學(xué)習(xí)更多關(guān)于 AppFabric 的緩存服務(wù)知識。 總結(jié)ASP.NET 4 新增的輸出緩存提供程序擴(kuò)展能力讓開發(fā)人員能夠容易地為網(wǎng)站和 Web 應(yīng)用程序追求更好更智能的輸出緩存策略。這些能夠顯著地提高應(yīng)用程序的性能和響應(yīng)能力,同時提高用戶體驗并減少所需服務(wù)器資源的數(shù)量。 轉(zhuǎn)載于:https://www.cnblogs.com/netatomy/articles/extensible-output-caching-with-asp-net-4-vs-2010-and-net-4-0-series.html 來源:https://www./content-1-375651.html |
|
|