轉自: ChinaByte
上面的第一、三、四、六幾種算法有一個共同特點:或者是其中一種語言獨具某個功能,或者在正則表達式匹配和距離計算中,兩種語言的差別非常大,足以成為一個很有意義的混合語言編程測試項目。這就為我們測試這些算法增加了兩種方案:以VBScript作為基本語言調用內嵌的JScript函數;以JScript為基本語言調用內嵌的VBScript函數。測試代碼舉例如下(測試方案:字符串翻轉,以JScript為基本語言,VBScript內嵌): < %@Language=JScript% > < SCRIPT language="VBScript" runat="Server" > Function StrRevVB(strParm) StrReverse(strParm) End Function < /SCRIPT > < % StrRevVB("String Reversal") % >
所有其他例程都只包含語言本身提供的功能,這些例程只用純VBScript和純JScript版的代碼測試。換句話說,對于任何情形的混合語言編程合理性測試來說,這些例程的價值都不大。
第一組測試運行前六個例程,對于每一次運行,測試工具頁面都要進行1000次對包含測試例程的ASP頁面的調用(Server.Execute)。換句話說,如果某次運行調用了一個兩種腳本語言都編寫的頁面1000次,則調用ASP引擎和各個腳本引擎的開銷都達到1000次。雖然這種方法導致腳本引擎的開銷影響測試結果,但我們獲得的測試結果卻更能反映出實際應用場合的效果。也就是說,雖然我們可以在單個頁面之內完成1000次字符串翻轉之類的操作,但更接近實際的是將這些代碼和其他代碼放入同一頁面,然后讓這個頁面執行數千次。
第二組測試運行全部八個例程,每次運行期間測試工具頁面只執行測試頁面1次,但測試頁面本身包含循環。字符串翻轉和簡單數學計算都在它們各自的ASP頁面內運行10,000次。模式匹配操作執行1,000次。字符串查找、距離計算以及兩個位移操作(左移和右移)操作執行10,000次。在數組初始化測試中,程序聲明一個100,000個元素的數組,然后通過For循環對它進行初始化并將計數器的值賦予各個元素。在記錄集遍歷測試中,程序通過While外循環遍歷記錄集(記錄集包含830個記錄),通過For Each ... Next內循環遍歷單個記錄的各個字段(每個記錄有14個字段)。
第二組測試提供的是這樣一些方案,它們更加側重于被測試例程本身的執行開銷,從而更清楚地告訴我們兩種腳本語言在執行時間方面的優缺點。
|