大多數(shù) Active Server Pages (ASP) 應(yīng)用程序都要通過字符串連接來創(chuàng)建呈現(xiàn)給用戶的 HTML 格式的數(shù)據(jù)。本文對(duì)幾種創(chuàng)建此 HTML 數(shù)據(jù)流的方法進(jìn)行了比較,在特定情況下,某些方法在性能方面要優(yōu)于其他方法。本文假定您已經(jīng)具備一定的 ASP 和 Visual Basic 編程方面的知識(shí)。
編寫 ASP 頁面時(shí),開發(fā)人員實(shí)際上是創(chuàng)建一個(gè)格式化的文本流,通過 ASP 提供的 Response 對(duì)象寫入 Web 客戶端。創(chuàng)建此文本流的方法有多種,而您選擇的方法將對(duì) Web 應(yīng)用程序的性能和可縮放性產(chǎn)生很大影響。很多次,在我?guī)椭蛻魞?yōu)化其 Web 應(yīng)用程序的性能時(shí),發(fā)現(xiàn)其中一個(gè)比較有效的方法是更改 HTML 流的創(chuàng)建方式。本文將介紹幾種常用技術(shù),并測(cè)試它們對(duì)一個(gè)簡(jiǎn)單的 ASP 頁面的性能所產(chǎn)生的影響。
許多 ASP 開發(fā)人員都遵循良好的軟件工程原則,盡可能地將其代碼模塊化。這種設(shè)計(jì)通常使用一些包含文件,這些文件中包含對(duì)頁面的特定不連續(xù)部分進(jìn)行格式化生成的函數(shù)。這些函數(shù)的字符串輸出(通常是 HTML 表格代碼)可以通過各種組合創(chuàng)建一個(gè)完整的頁面。某些開發(fā)人員對(duì)此方法進(jìn)行了改進(jìn),將這些 HTML 函數(shù)移到 Visual Basic COM 組件中,希望充分利用已編譯的代碼提供的額外性能。
盡管這種設(shè)計(jì)方法很不錯(cuò),但創(chuàng)建組成這些不連續(xù) HTML 代碼組件的字符串所使用的方法將對(duì) Web 站點(diǎn)的性能和可縮放性產(chǎn)生很大的影響,無論實(shí)際的操作是在 ASP 包含文件中執(zhí)行還是在 Visual Basic COM 組件中執(zhí)行。
請(qǐng)看以下 WriteHTML 函數(shù)的代碼片斷。名為 Data 的參數(shù)只是一個(gè)字符串?dāng)?shù)組,其中包含一些要格式化為表格結(jié)構(gòu)的數(shù)據(jù)(例如,從數(shù)據(jù)庫返回的數(shù)據(jù))。
Function WriteHTML( Data )Dim nRepFor nRep = 0 to 99 sHTML = sHTML & vbcrlf _ & "<TR><TD>" & (nRep + 1) & "</TD><TD>" _ & Data( 0, nRep ) & "</TD><TD>" _ & Data( 1, nRep ) & "</TD><TD>" _ & Data( 2, nRep ) & "</TD><TD>" _ & Data( 3, nRep ) & "</TD><TD>" _ & Data( 4, nRep ) & "</TD><TD>" _ & Data( 5, nRep ) & "</TD></TR>"NextWriteHTML = sHTMLEnd Function
這是很多 ASP 和 Visual Basic 開發(fā)人員創(chuàng)建 HTML 代碼時(shí)常用的方法。sHTML 變量中包含的文本返回到調(diào)用代碼,然后使用 Response.Write 寫入客戶端。當(dāng)然,這還可以表示為直接嵌入不包含 WriteHTML 函數(shù)的頁面的類似代碼。此代碼的問題是,ASP 和 Visual Basic 使用的字符串?dāng)?shù)據(jù)類型(BSTR 或 Basic 字符串)實(shí)際上無法更改長度。這意味著每當(dāng)字符串長度更改時(shí),內(nèi)存中字符串的原始表示形式都將遭到破壞,而且將創(chuàng)建一個(gè)包含新字符串?dāng)?shù)據(jù)的新的表示形式:這將增加分配內(nèi)存和解除分配內(nèi)存的操作。當(dāng)然,ASP 和 Visual Basic 已為您解決了這一問題,因此實(shí)際開銷不會(huì)立即顯現(xiàn)出來。分配內(nèi)存和解除分配內(nèi)存要求基本運(yùn)行時(shí)代碼解除各個(gè)專用鎖定,因此需要大量開銷。當(dāng)字符串變得很大并且有大塊內(nèi)存要被快速連續(xù)地分配和解除分配時(shí),此問題變得尤為明顯,就像在大型字符串連接期間出現(xiàn)的情況一樣。盡管這一問題對(duì)單用戶環(huán)境的影響不大,但在服務(wù)器環(huán)境(例如,在 Web 服務(wù)器上運(yùn)行的 ASP 應(yīng)用程序)中,它將導(dǎo)致嚴(yán)重的性能和可縮放性問題。
新聞熱點(diǎn)
疑難解答
圖片精選