效能 使用過程和函數對於代碼的組織和維護有著很大的好處,特別是頁面中部分代碼需要多次使用的時候。不過此時為了完成相同的處理任務要多出一次函數(或過程)的調用,這是它的缺點。從理論上看,函數塊內的變數具有更好的效率。下面我們來看看這兩個問題的測試結果。
8.1 將Response.Write語句移入子過程
在這個測試中,我們只把Response.Write語句放到了子過程裡面。
...
CALL writeTable()
SUB writeTable()
Response.Write("< html >" & _
"< head >" & _
...
"< tr >< td >< b >EMail:< /b >< /td >< td >" & EMail & "< /td >< /tr >" & _
"< tr >< td >< b >Birth Date:< /b >< /td >< td >" & BirthDate & "< /td >< /tr >" & _
"< /table >" & _
"< /body >" & _
"< /html >")
END SUB
/app2/function1.asp片斷
基 准 = 5.57 毫秒/頁
回應時間 = 6.02 毫秒/頁
差 額 = +0.45 毫秒 (增加8.1%)
和預期的一樣,子程序呼叫增加了額外的頁面處理負擔。
8.2 將所有指令碼移入子過程
在這個測試中,Response.Write和所有的變數聲明都移到了子過程裡面。
< % OPTION EXPLICIT
CALL writeTable()
SUB writeTable()
Dim FirstName
...
Dim BirthDate
FirstName = "John"
...
BirthDate = "1/1/1950"
Response.Write("< html >" & _
"< head >" & _
" < title >Response Test< /title >" & _
"< /head >" & _
"< body >" & _
"< h1 >Response Test< /h1 >" & _
"< table >" & _
"< tr >< td >< b >First Name:< /b >< /td >< td >" & FirstName & "< /td >< /tr >" & _
...
"< tr >< td >< b >Birth Date:< /b >< /td >< td >" & BirthDate & "< /td >< /tr >" & _
"< /table >" & _
"< /body >" & _
"< /html >")
END SUB
/app2/function2.asp片斷
基 准 = 5.57 毫秒/頁
回應時間 = 5.22 毫秒/頁
差 額 = -0.35 毫秒 (減少6.3%)
雖然仍舊有著附加的函數調用,把變數聲明放到函數內部居然使效能增加到超過基準,這是一個值得關注的結果!我們得到了如下規則:
如果頁面中部分代碼要使用一次以上,用函數封裝它們。
如果合適的話,把變數聲明也移到函數裡面。