ASP是微軟推出的一種伺服器端命令執行環境,它可以使你輕鬆的製作互動WEB應用程式。作為目前NT平台上開發WEB伺服器的一種使用最多的技術,它的出現取代了過去只有使用CGI技術才能做的許多事情,而且ASP對於資料庫的控制簡單有效,省去了CGI的大量編程工作。
由於ASP直接對伺服器進行操作,因此,ASP設計的技巧就顯得非常重要,不當的ASP應用程式會增加WEB伺服器的負擔,降低伺服器的效能。我總結了一年來自己ASP設計的經驗,希望能對大家有所協助,不對的地方希望大家指正。
本文討論的主要是ASP程式的效能提升技巧,它包括兩個部分:
* HTML頁面效能的提升技巧
* ASP程式的反應時間提高的技巧
下面我就分別詳細的討論一下這兩個方面。
1. 提高HTML頁面的效能幾個技巧
HTML頁面的效能主要和用戶端的電腦的效能有關,總的來說,主要和用戶端的電腦的硬體以及客戶所擁有的頻寬密切相關,除此之外,有幾個因素也以影響HTML頁面的效能:
大家都知道,頁面越小,在瀏覽器中載入的時間就會越少,效能也越好。以下是減少頁面大小的幾個有用的技巧:
(1) 減少圖象的數量:當你的頁面中含有N幅圖象的時候,你的瀏覽器就會向WEB伺服器發出N次請求,這樣就會浪費大量的時間,在頻寬比較窄的情況下尤其要避免在面中插入大量的圖象。
(2) 減少架構的使用量:架構是另外一個降低頁面顯示速度的元素,就象圖象一樣,瀏覽器會向伺服器發出N次請求,因此,也要避免大量的架構使用。
(3) 避免使用表格:雖然一個漂亮的頁面少不了表格,但是我們應該減少不必要表格的使用,這樣會加快頁面的載入速度。
(4) 不要在HTML中加入注釋
(5) 避免使用長檔名,養成使用相對路徑的習慣。
(6) 不必要的時候,不要使用指令碼,否則會降低頁面的顯示速度。
2. 提高ASP程式反應時間的幾個技巧
進一步的分,提高ASP的反應時間又涉及到三個方面的內容:
* ASP本身的效能的提升技巧
* 網路頻寬
* 資料庫效能的提升技巧
下面我就分別詳細的講述一下這三個方面的內容.
A. ASP頁面本身的效能的提升技巧
(1)讀取物件變數總是慢於讀取本地變數,因此,應該養成把物件變數轉存到本地變數的的習慣,這樣會提高ASP的反應時間,下面的這兩個例子就是一個很好的對比:
慢的例子:
if Myobj.Value = 0 then
Do 略
elseif Myobj.Value > 0 then
Do 略
elseif Myobj.Value < 0 then
Do 略
end if
比較快的例子:
MyVar = Myobj.Value
if MyVar = 0 then
Do 略
elseif MyVar > 0 then
Do 略
elseif MyVar < 0 then
Do 略
end if
上面比較快的例子雖然只是作了一個小小的改動,但在效能上卻有不少的提升。
(2)如果你正在使用的是VBScript 5.0或更高的版本,你可以使用WITH……END WITH的結構,這樣也能使ASP的效能提高不少。
(3)一般情況下,避免使用session變數,因為每一個session變數都佔用一個線程,session調用是一個接一個的完成的。所以這樣會降低ASP的速度,你可以使用QueryString集合或者隱藏的變數來代替session變數來儲存資料。這樣會比使用session變數佔用的線程少。
(4)如果你實在無法避免使用session變數,而且你有大量session變數,那麼你應該考慮使用字典對象。
(5)開啟緩衝會提高ASP的效能,如在每一個ASP頁面中使用Response.Buffer=True就是一個很好的習慣,它能明顯的提高頁面的顯示速度。
(6)把你的資料讀取的代碼打包成COM組件,你會領略到編譯和多線程給你帶來的速度上的提升。眾所周知,建立一個資料庫的串連會耗費大量的資源和時間,怎麼能解決這個問題呢?當你的組件運行在Microsoft Transaction Server (MTS)時,利用串連池能很好的解決這個問題。MTS是一個以WINDOWS NT為基礎的一項技術,當和DCOM聯合使用的時候,它允許你更好的把COM對象在網路上分布,效果比單獨使用DCOM更好。
(7)避免多次調用COM組件,例如,如果你想向COM組件中寫入10個值,你得調用10次COM組件,如果你能只調用一次,那麼就能大大提高整體效能。
(8)不要和application或session 範圍一起聲明象ADO連線物件這樣的COM組件,因為這些多執行緒元件的線程調用之間還得協調,因此大大降低了ASP的效能。
(9)當你的ASP頁面中的代碼超過100行,你最好考慮將它們移植到COM組件,ASP指令碼是在啟動並執行時候解釋,而COM組件是經過編譯的。
(10)不要使用Microsoft Word 或Excel組件來操作資料,這些組件對於ASP都是沒有經過最佳化的。
(11)我們開發WEB應用程式的時候,總是喜歡建立一個大的include檔案包含所有的全球變數,但是這個方法的最大弊病就是並不是所有的頁面都需要這些變數,而每個頁面都要處理這些變數,因而會大大影響ASP的速度。
(12)避免多次使用Request.Write,最好將他們整和到一個Request.Write中。
B.網路頻寬
(1) 盡量使用100M的網卡,這樣會大大提高ASP應用程式的反應時間。
(2) 如果你的WEB伺服器和資料庫在同一個伺服器上,建議將它們移植到不同的資料庫上。
(3) 建議將COM組件和MTS一起使用。
C.資料庫的效能的提升技巧
一種好的資料庫設計方法可以大大的提高ASP程式的效能,詳細的論述這方面的內容已經超出了本文的範圍,在此我只簡要的介紹幾個技巧。
(1) 使用ADO Recordset的時候,注意使用cursor type 和lock type兩個屬性,例如,如果你想填充組合列表的話,應該把cursor type設為 adOpenForwardOnly並且 lock type 設為adLockReadOnly。
(2) 有時合適的分配一些資料庫的緩衝可以很好的提高ASP的效能。例如,如果你使用Oracle作為資料庫的時候,一個串連要開三個對話,如果你能很好的降低串連的數目的話,那麼你的ASP效能將會大副提升。
(3) 注意使用正確的資料庫查詢語句,範圍過大的查詢動作會浪費大量的時間,因此一定要想方設法縮減查詢範圍,提高查詢速度。
本文到此就寫完了,我再次聲明一下,如果文章中有不對的地方,懇請大家回信指正,也希望廣大的ASP愛好者來信互相切磋。