1.可擴充輸出緩衝
自從ASP.NET 1.0發布開始,一般都是通過使用輸出緩衝將頁、控制項和http響應儲存在記憶體中。對於後續的Web請求,ASP.NET可以從記憶體中檢索存在的緩衝輸出並不是從頭開始重建輸出,從而更快地提供響應。但該方法有一個限制,就是緩衝的資料必須儲存在記憶體中。在負載較大的伺服器上,輸出緩衝的記憶體需求可能會和Web應用程式其它它部分的記憶體需求產生衝突。
ASP.NET 4 為輸出緩衝增加了擴充性,使您能夠配置一個或多個自訂輸出緩衝提供者。輸出緩衝提供者可使用任何儲存機制儲存 HTML 內容。這些儲存選項包括本地或遠程磁碟、雲端儲存和分布式緩衝引擎。
藉助ASP.NET 4 中可以定製輸出緩衝提供者的功能,我們就可以為網站設計更為主動而且更加智勇雙全能的輸出緩衝策略。例如,我們可以建立這樣一個輸出緩衝提供者,該程式將網站流量“排名前10”的頁面緩衝在記憶體裡,而將其它的頁面緩衝在磁碟裡。或者,也可以對所呈現頁面的各種變化因素組合進行緩衝,但應該使用分布式緩衝以減少前端Web伺服器的記憶體消耗。
我們可以建立繼承自OutPutCacheProvider類型的類來自訂輸出緩衝提供者。隨後,可以通過在web.config中進行配置該提供者,設定outputCache節點的providers子節點,如下面的樣本所示:
<caching>
<outputCache defaultProvider="AspNetInternalProvider">
<providers>
<add name="DiskCache"
type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
</providers>
</outputCache>
</caching>
在ASP.NET 4 的預設輸出緩衝策略中。所有的HTTP響應、所呈現的頁面和控制項緩衝均使用上例所示的預設輸出緩衝提供者(其中defaultProvider屬性值為AspNetInternalProvider)。通過為defaultProvider指定不同的提供者。就可以更改web應用程式的預設輸出緩衝提供者。
另外,還可以針對每個使用者控制項和各個請求選擇不同的輸出緩衝提供者。要為不同的Web使用者控制項選擇不同的輸出緩衝提供者,最簡便的方法是設定頁面或控制項指令中新增加的providerName屬性,如下面的樣本所示:
<%@ OutputCache Duration="60" VaryByParam="None"
providerName="DiskCache" %>
若要為某個HTTP請求指定不同的輸出緩衝提供者,可以覆蓋Global.asax檔案中新增加的GetOutputCacheProviderName方法,以編程的方式指定要用於特定請求的提供者。
2.預先載入Web應用程式
某些Web應用程式在第一次請求提供服務之前,需要載入大量的資料或執行開銷很大的初始化處理。在ASP.NET早期版本中,對於此類情況,必須採用自訂方法“喚醒”ASP.NET應用程式,然後在Global.asax檔案中的Application_Load方法中運行初始化代碼。
為應對這種情況,當ASP.NET 4在Windows Server 2008 R2上的IIS7.5中運行時,ASP.NET 4提供一種新的應用程式預先載入管理器。預先載入功能提供了一種可控的方法,用於啟動應用程式集區,初始化ASP.NET應用程式,然後接受HTTP請求。通過這種方法,您可以在處理第一項HTTP請求之前執行開銷很大的應用程式初始化的工作。例如,可以使用預先載入管理器初始化某個應用程式,然後向Server Load Balancer器發生訊號,告知應用程式已初始化並做好接受HTTP請求的準備。
若要使用應用程式預先載入管理器,就需要配置applicationHost.config檔案,設定IIS 7.5中的應用程式集區為自動啟動,配置如下:
<applicationPools>
<add name="MyApplicationPool" startMode="AlwaysRunning" />
</applicationPools>
由於一個應用程式集區可以包含多個應用程式,因此我們就需要通過使用applicationHost.config檔案中的以下配置分別指定要自動啟動的各個應用程式:
<sites>
<site name="MySite" id="1">
<application path="/"
serviceAutoStartEnabled="true"
serviceAutoStartProvider="PrewarmMyCache" >
<!-- Additional content -->
</application>
</site>
</sites>
<!-- Additional content -->
<serviceAutoStartProviders>
<add name="PrewarmMyCache"
type="MyNamespace.CustomInitialization, MyLibrary" />
</serviceAutoStartProviders>
3.永久重新導向頁面
在應用程式的生命週期內,Web應用程式中有可能修改url的顯示規則。
在ASP.NET 中,開發人員處理對舊的URL的請求的傳統方式是使用Redirect方法將請求轉寄至新的URL。然而,Redirect方法會發出HTTP 302臨時重新導向。這會產生額外的HTTP往返。也不是對搜尋引擎的友好。
ASP.NET 4 增加了一個RedirectPermanent協助方法,使用該方法可以方便地發生http 301(永久跳轉)的響應,如下面的樣本所示:
RedirectPermanent("/newpath/foroldcontent.aspx");
4.工作階段狀態壓縮
預設情況下,ASP.NET 提供兩用於儲存整個Web應用程式中的工作階段狀態的選項。第一個選項是一個調用進程外工作階段狀態伺服器的工作階段狀態提供者。第二個選項是一個在Microsoft SQL Server資料庫中儲存資料的工作階段狀態提供者。
由於這兩個選項均在 Web 應用程式的背景工作處理序之外儲存狀態資訊,因此在將工作階段狀態發送至遠程儲存空間之前,必須對其進行序列化。如果工作階段狀態中儲存了大量資料,序列化資料的大小可能變得很大。
ASP.NET 4 針對這兩種類型的進程外工作階段狀態提供者引入了一個新的壓縮選項。使用此選項,在 Web 服務器上有多餘 CPU 週期的應用程式可以大大縮減序列化工作階段狀態資料的大小。
可以使用設定檔中 sessionState 元素的新增加的 compressionEnabled 屬性設定此選項。當 compressionEnabled 配置選項設定為 true 時,ASP.NET 使用 .NET Framework GZipStream類對序列化工作階段狀態進行壓縮和解壓縮。下面的樣本示範如何設定該特性。
<sessionState
mode="SqlServer"
sqlConnectionString="data source=dbserver;Initial Catalog=aspnetstate"
allowCustomSqlDatabase="true"
compressionEnabled="true"
/>