技巧 19:利用瀏覽器的驗證能力 流行的瀏覽器具有對以下功能的進階支援,例如 XML、DHTML、Java Applet以及遠端資料服務。請盡量利用這些功能。所有這些技術,都可以通過執行用戶端的驗證和資料緩衝,減少了與 Web 服務器之間的往返。如果您正在運行智能瀏覽器,該瀏覽器可以為您進行一些驗證(例如,在運行 POST 之前檢查信用卡的校正和否有效)。重申一次,請盡量使用這些功能。由於削減了用戶端到伺服器的往返路程,將減少對 Web 服務器的壓力,並且削減了網路通訊量(雖然發送給瀏覽器的初始頁面可能更大),伺服器訪問的所有後端資源也削減了。而且使用者不必經常提取新頁,使使用者的感受好一些。這並不減輕對伺服器端驗證的需要。還是應該經常進行伺服器端的驗證。這樣能夠防止由於某些原因從用戶端來的壞資料,例如駭客,或者不運行用戶端驗證程式的瀏覽器。
許多網站由獨立於瀏覽器建立的 HTML 組成。這一點經常阻礙開發人員利用可以提高效能的流行瀏覽器功能。對於真正高效能的、必須關心瀏覽器的網站,良好的策略是針對流行的瀏覽器最佳化您的頁面。在 ASP 中使用“瀏覽器效能組件”,很容易檢測到瀏覽器的功能。諸如 Microsoft FrontPage 等工具,能協助您設計使用所希望的目標瀏覽器和 HTML 版本的代碼。更詳細的討論,請查看 When is Better Worse? Weighing the Technology Trade-Offs(英文)。
技巧 20:在迴圈中避免字串串聯 許多人在迴圈中建立類似這樣的字串:
s = "<table>" & vbCrLf
For Each fld in rs.Fields
s = s & " <th>" & fld.Name & "</th> "
Next
While Not rs.EOF
s = s & vbCrLf & " <tr>"
For Each fld in rs.Fields
s = s & " <td>" & fld.Value & "</td> "
Next
s = s & " </tr>"
rs.MoveNext
Wend
s = s & vbCrLf & "</table>" & vbCrLf
Response.Write s
這種方法有幾個問題。首先,重複連接字串所花費的時間,以二次方曲線的速率增長;粗略地計算,運行迴圈所花費的時間,與記錄數乘以欄位數的平方成正比。舉一個簡單的例子,便能清楚地說明這一點。
s = ""
For i = Asc("A") to Asc("Z")
s = s & Chr(i)
Next
在第一次迭代中,得到一個字元的字串“A”。在第二次迭代中,VBScript 必須重新分配字串並複製兩個字元“AB”到 s。在第三次迭代中,它必須再次重新分配 s,並複製三個字元到 s。在第 N 次(26 次)迭代中,它必須重新分配並複製 N 個字元到 s。就是 1+2+3+...+N 的和,為 N*(N+1)/2 次複製。
在以上記錄集的例子中,如果有 100 條記錄和 5個欄位,則內部的迴圈將執行 100*5 = 500 次,並且完成所有複製和重新分配所花費時間,將與 500*500 = 250,000 成正比。對一個大小適度的記錄集,將有很多次複製。
在該例子中,代碼可以改進:字串的串連將被 Response.Write() 或內嵌指令碼 (<% = fld.Value %>) 所替代。如果開啟響應緩衝,這個操作將會很快,因為 Response.Write 僅僅將資料添加到響應緩衝的末尾。不再重新分配,因而非常有效。
特別是在將 ADO 記錄集轉換到 HTML 表時,請考慮使用 GetRows 或 GetString。
如果用 JScript 連接字串,強烈建議使用 += 操作符;即用 s += "某字串", 而不是 s = s + "某字串"。