自從ASP.NET 1.0發(fā)布開(kāi)始,一般都是通過(guò)使用輸出緩存將頁(yè)、控件和http響應(yīng)保存在內(nèi)存中。對(duì)于后續(xù)的Web請(qǐng)求,ASP.NET可以從內(nèi)存中檢索存在的緩存輸出并不是從頭開(kāi)始重新生成輸出,從而更快地提供響應(yīng)。但該方法有一個(gè)限制,就是緩存的數(shù)據(jù)必須存儲(chǔ)在內(nèi)存中。在負(fù)載較大的服務(wù)器上,輸出緩存的內(nèi)存需求可能會(huì)和Web應(yīng)用程序其它它部分的內(nèi)存需求產(chǎn)生沖突。
ASP.NET 4 為輸出緩存增加了擴(kuò)展性,使您能夠配置一個(gè)或多個(gè)自定義輸出緩存提供程序。輸出緩存提供程序可使用任何存儲(chǔ)機(jī)制保存 HTML 內(nèi)容。這些存儲(chǔ)選項(xiàng)包括本地或遠(yuǎn)程磁盤、云存儲(chǔ)和分布式緩存引擎。
借助ASP.NET 4 中可以定制輸出緩存提供程序的功能,我們就可以為網(wǎng)站設(shè)計(jì)更為主動(dòng)而且更加智勇雙全能的輸出緩存策略。例如,我們可以創(chuàng)建這樣一個(gè)輸出緩存提供程序,該程序?qū)⒄军c(diǎn)流量“排名前10”的頁(yè)面緩存在內(nèi)存里,而將其它的頁(yè)面緩存在磁盤里?;蛘撸部梢詫?duì)所呈現(xiàn)頁(yè)面的各種變化因素組合進(jìn)行緩存,但應(yīng)該使用分布式緩存以減少前端Web服務(wù)器的內(nèi)存消耗。
我們可以創(chuàng)建繼承自O(shè)utPutCacheProvider類型的類來(lái)自定義輸出緩存提供程序。隨后,可以通過(guò)在web.config中進(jìn)行配置該提供程序,設(shè)置outputCache節(jié)點(diǎn)的providers子節(jié)點(diǎn),如下面的示例所示:
在ASP.NET 4 的默認(rèn)輸出緩存策略中。所有的HTTP響應(yīng)、所呈現(xiàn)的頁(yè)面和控件緩存均使用上例所示的默認(rèn)輸出緩存提供程序(其中defaultProvider屬性值為AspNetInternalProvider)。通過(guò)為defaultProvider指定不同的提供程序。就可以更改web應(yīng)用程序的默認(rèn)輸出緩存提供程序。
另外,還可以針對(duì)每個(gè)用戶控件和各個(gè)請(qǐng)求選擇不同的輸出緩存提供程序。要為不同的Web用戶控件選擇不同的輸出緩存提供程序,最簡(jiǎn)便的方法是設(shè)置頁(yè)面或控件指令中新增加的providerName屬性,如下面的示例所示:
<%@ OutputCache Duration="60" VaryByParam="None"
providerName="DiskCache" %>
若要為某個(gè)HTTP請(qǐng)求指定不同的輸出緩存提供程序,可以覆蓋Global.asax文件中新增加的GetOutputCacheProviderName方法,以編程的方式指定要用于特定請(qǐng)求的提供程序。
2.預(yù)加載Web應(yīng)用程序
某些Web應(yīng)用程序在第一次請(qǐng)求提供服務(wù)之前,需要加載大量的數(shù)據(jù)或執(zhí)行開(kāi)銷很大的初始化處理。在ASP.NET早期版本中,對(duì)于此類情況,必須采用自定義方法“喚醒”ASP.NET應(yīng)用程序,然后在Global.asax文件中的Application_Load方法中運(yùn)行初始化代碼。
為應(yīng)對(duì)這種情況,當(dāng)ASP.NET 4在Windows Server 2008 R2上的IIS7.5中運(yùn)行時(shí),ASP.NET 4提供一種新的應(yīng)用程序預(yù)加載管理器。預(yù)加載功能提供了一種可控的方法,用于啟動(dòng)應(yīng)用程序池,初始化ASP.NET應(yīng)用程序,然后接受HTTP請(qǐng)求。通過(guò)這種方法,您可以在處理第一項(xiàng)HTTP請(qǐng)求之前執(zhí)行開(kāi)銷很大的應(yīng)用程序初始化的工作。例如,可以使用預(yù)加載管理器初始化某個(gè)應(yīng)用程序,然后向負(fù)載平衡器發(fā)生信號(hào),告知應(yīng)用程序已初始化并做好接受HTTP請(qǐng)求的準(zhǔn)備。
若要使用應(yīng)用程序預(yù)加載管理器,就需要配置applicationHost.config文件,設(shè)置IIS 7.5中的應(yīng)用程序池為自動(dòng)啟動(dòng),配置如下:
由于一個(gè)應(yīng)用程序池可以包含多個(gè)應(yīng)用程序,因此我們就需要通過(guò)使用applicationHost.config文件中的以下配置分別指定要自動(dòng)啟動(dòng)的各個(gè)應(yīng)用程序:
3.永久重定向頁(yè)面
在應(yīng)用程序的生命周期內(nèi),Web應(yīng)用程序中有可能修改url的顯示規(guī)則。
在ASP.NET 中,開(kāi)發(fā)人員處理對(duì)舊的URL的請(qǐng)求的傳統(tǒng)方式是使用Redirect方法將請(qǐng)求轉(zhuǎn)發(fā)至新的URL。然而,Redirect方法會(huì)發(fā)出HTTP 302臨時(shí)重定向。這會(huì)產(chǎn)生額外的HTTP往返。也不是對(duì)搜索引擎的友好。
ASP.NET 4 增加了一個(gè)RedirectPermanent幫助方法,使用該方法可以方便地發(fā)生http 301(永久跳轉(zhuǎn))的響應(yīng),如下面的示例所示:
RedirectPermanent("/newpath/foroldcontent.aspx");
默認(rèn)情況下,ASP.NET 提供兩用于存儲(chǔ)整個(gè)Web應(yīng)用程序中的會(huì)話狀態(tài)的選項(xiàng)。第一個(gè)選項(xiàng)是一個(gè)調(diào)用進(jìn)程外會(huì)話狀態(tài)服務(wù)器的會(huì)話狀態(tài)提供程序。第二個(gè)選項(xiàng)是一個(gè)在Microsoft SQL Server數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)的會(huì)話狀態(tài)提供程序。
由于這兩個(gè)選項(xiàng)均在 Web 應(yīng)用程序的工作進(jìn)程之外存儲(chǔ)狀態(tài)信息,因此在將會(huì)話狀態(tài)發(fā)送至遠(yuǎn)程存儲(chǔ)器之前,必須對(duì)其進(jìn)行序列化。如果會(huì)話狀態(tài)中保存了大量數(shù)據(jù),序列化數(shù)據(jù)的大小可能變得很大。
ASP.NET 4 針對(duì)這兩種類型的進(jìn)程外會(huì)話狀態(tài)提供程序引入了一個(gè)新的壓縮選項(xiàng)。使用此選項(xiàng),在 Web 服務(wù)器上有多余 CPU 周期的應(yīng)用程序可以大大縮減序列化會(huì)話狀態(tài)數(shù)據(jù)的大小。
可以使用配置文件中 sessionState 元素的新增加的 compressionEnabled 屬性設(shè)置此選項(xiàng)。當(dāng) compressionEnabled 配置選項(xiàng)設(shè)置為 true 時(shí),ASP.NET 使用 .NET Framework GZipStream類對(duì)序列化會(huì)話狀態(tài)進(jìn)行壓縮和解壓縮。下面的示例演示如何設(shè)置該特性。
聯(lián)系客服