避免到服務(wù)器的不必要的往返過程
雖然您很可能希望盡量多地使用 Web 窗體頁框架的那些節(jié)省時(shí)間和代碼的功能,但在某些情況下卻不宜使用 ASP.NET 服務(wù)器控件和回發(fā)事件處理。通常,只有在檢索或存儲(chǔ)數(shù)據(jù)時(shí),您才需要啟動(dòng)到服務(wù)器的往返過程。多數(shù)數(shù)據(jù)操作可在這些往返過程間的客戶端上進(jìn)行。例如,從 HTML 窗體驗(yàn)證用戶輸入經(jīng)常可在數(shù)據(jù)提交到服務(wù)器之前在客戶端進(jìn)行。通常,如果不需要將信息傳遞到服務(wù)器以將其存儲(chǔ)在數(shù)據(jù)庫中,那么您不應(yīng)該編寫導(dǎo)致往返過程的代碼。如果您開發(fā)自定義服務(wù)器控件,請(qǐng)考慮讓它們?yōu)橹С?ECMAScript. 的瀏覽器呈現(xiàn)客戶端代碼。通過以這種方式使用服務(wù)器控件,您可以顯著地減少信息被不必要的發(fā)送到 Web 服務(wù)器的次數(shù)。
使用 Page.IsPostBack 避免對(duì)往返過程執(zhí)行不必要的處理
如果您編寫處理服務(wù)器控件回發(fā)處理的代碼,有時(shí)可能需要在首次請(qǐng)求頁時(shí)執(zhí)行其他代碼,而不是當(dāng)用戶發(fā)送包含在該頁中的 HTML 窗體時(shí)執(zhí)行的代碼。根據(jù)該頁是否是響應(yīng)服務(wù)器控件事件生成的。
使用 Page.IsPostBack 屬性有條件地執(zhí)行代碼
例如,下面的代碼演示如何創(chuàng)建數(shù)據(jù)庫連接和命令,該命令在首次請(qǐng)求該頁時(shí)將數(shù)據(jù)綁定到 DataGrid 服務(wù)器控件。
以下是代碼片段: void Page_Load(Object sender, EventArgs e) { // Set up a connection and command here. if (!Page.IsPostBack) { String query = "select * from Authors where FirstName like '%JUSTIN%'"; myCommand.Fill(ds, "Authors"); myDataGrid.DataBind(); } } |
由于每次請(qǐng)求時(shí)都執(zhí)行 Page_Load 事件,上述代碼檢查 IsPostBack 屬性是否設(shè)置為 false。如果是,則執(zhí)行代碼。如果該屬性設(shè)置為 true,則不執(zhí)行代碼。注意 如果不運(yùn)行這種檢查,回發(fā)頁的行為將不更改。Page_Load 事件的代碼在執(zhí)行服務(wù)器控件事件之前執(zhí)行,但只有服務(wù)器控件事件的結(jié)果才可能在輸出頁上呈現(xiàn)。如果不運(yùn)行該檢查,仍將為 Page_Load 事件和該頁上的任何服務(wù)器控件事件執(zhí)行處理。
當(dāng)不使用會(huì)話狀態(tài)時(shí)禁用它
并不是所有的應(yīng)用程序或頁都需要針對(duì)于具體用戶的會(huì)話狀態(tài),您應(yīng)該對(duì)任何不需要會(huì)話狀態(tài)的應(yīng)用程序或頁禁用會(huì)話狀態(tài)。 若要禁用頁的會(huì)話狀態(tài),請(qǐng)將 @ Page 指令中的 EnableSessionState 屬性設(shè)置為 false。
注意:如果頁需要訪問會(huì)話變量,但不打算創(chuàng)建或修改它們,則將@ Page 指令中的 EnableSessionState 屬性設(shè)置為ReadOnly。還可以禁用 XML Web services 方法的會(huì)話狀態(tài)。有關(guān)更多信息,請(qǐng)參見使用 ASP.NET 和 XML Web services 客戶端創(chuàng)建的 XML Web services。若要禁用應(yīng)用程序的會(huì)話狀態(tài),請(qǐng)?jiān)趹?yīng)用程序 Web.config 文件的 sessionstate 配置節(jié)中將 mode 屬性設(shè)置為 off。
仔細(xì)選擇會(huì)話狀態(tài)提供程序
ASP.NET 為存儲(chǔ)應(yīng)用程序的會(huì)話數(shù)據(jù)提供了三種不同的方法:進(jìn)程內(nèi)會(huì)話狀態(tài)、作為 Windows 服務(wù)的進(jìn)程外會(huì)話狀態(tài)和 SQL Server 數(shù)據(jù)庫中的進(jìn)程外會(huì)話狀態(tài)。每種方法都有自己的優(yōu)點(diǎn),但進(jìn)程內(nèi)會(huì)話狀態(tài)是迄今為止速度最快的解決方案。如果只在會(huì)話狀態(tài)中存儲(chǔ)少量易失數(shù)據(jù),則建議您使用進(jìn)程內(nèi)提供程序。進(jìn)程外解決方案主要用于跨多個(gè)處理器或多個(gè)計(jì)算機(jī)縮放應(yīng)用程序,或者用于服務(wù)器或進(jìn)程重新啟動(dòng)時(shí)不能丟失數(shù)據(jù)的情況。有關(guān)更多信息,請(qǐng)參見 ASP.NET 狀態(tài)管理。
不使用不必要的Server Control
ASP.net中,大量的服務(wù)器端控件方便了程序開發(fā),但也可能帶來性能的損失,因?yàn)橛脩裘坎僮饕淮畏⻊?wù)器端控件,就產(chǎn)生一次與服務(wù)器端的往返過程。因此,非必要,應(yīng)當(dāng)少使用Server Control。
ASP.NET應(yīng)用程序性能測試
在對(duì)ASP.NET應(yīng)用程序進(jìn)行性能測試之前,應(yīng)確保應(yīng)用程序沒有錯(cuò)誤,而且功能正確。具體的性能測試可以采用以下工具進(jìn)行:Web Application Strees Tool (WAS)是Microsoft發(fā)布的一個(gè)免費(fèi)測試工具,可以從http://webtool.rte.microsoft.com/上下載。它可以模擬成百上千個(gè)用戶同時(shí)對(duì)web應(yīng)用程序進(jìn)行訪問請(qǐng)求,在服務(wù)器上形成流量負(fù)載,從而達(dá)到測試的目的,可以生成平均TTFB、平均TTLB等性能匯總報(bào)告。Application Center Test (ACT) 是一個(gè)測試工具,附帶于Visual Studio.NET的企業(yè)版中,是Microsoft正式支持的web應(yīng)用程序測試工具。它能夠直觀地生成圖表結(jié)果,功能比WAS多,但不具備多個(gè)客戶機(jī)同時(shí)測試的能力。服務(wù)器操作系統(tǒng)"管理工具"中的"性能"計(jì)數(shù)器,可以對(duì)服務(wù)器進(jìn)行監(jiān)測以了解應(yīng)用程序性能。
結(jié)論:
對(duì)于網(wǎng)站開發(fā)人員來說,在編寫ASP.NET應(yīng)用程序時(shí)注意性能問題,養(yǎng)成良好的習(xí)慣,提高應(yīng)用程序性能,至少可以推遲必需的硬件升級(jí),降低網(wǎng)站的成本。
【 1 】 【 2 】 【 3 】 【 4 】 【 5 】 |