打開響應(yīng)緩沖有兩種方法。第一種,可以使用“Internet 服務(wù)管理器”為整個應(yīng)用程序打開響應(yīng)緩沖。這是推薦的方法,在 IIS 4.0 和 IIS 5.0 中,在默認(rèn)情況下,為新的 asp 應(yīng)用程序打開響應(yīng)緩沖。第二種,逐頁將下列代碼行放在 ASP 頁的開頭,從而啟用響應(yīng)緩沖:
<% Response.Buffer = True %>
該行代碼必須在任何響應(yīng)數(shù)據(jù)寫入瀏覽器之前執(zhí)行(也就是說,在任何 HTML 出現(xiàn)在 ASP 腳本中之前和任何 Cookies 被使用 Response.Cookies 集合設(shè)置之前)。通常,最好是為整個應(yīng)用程序打開響應(yīng)緩沖。這允許省略上面每頁中的代碼行。
(注意,在上面 1,000 行表的示例中,許多瀏覽器,在看到 </table> 結(jié)束標(biāo)記之前不會開始繪制表。請檢查目標(biāo)瀏覽器的支持性。要解決該問題,請將表分割為具有較少行的多個表,然后在每個表后面調(diào)用 Response.Flush。新版本的 Internet Explorer 將在表完全下載之前繪制表,特別是如果指定表的列寬則繪制速度更快;這避免強(qiáng)制 Internet Explorer 通過度量每個單元格的內(nèi)容來計算列寬。)
VBScript 語法 <% = expression %> 將“表達(dá)式”的值寫入 ASP 輸出流。如果響應(yīng)緩沖沒有打開,則這些語句的每一句都會導(dǎo)致通過網(wǎng)絡(luò),以許多小型包的形式,向瀏覽器寫入數(shù)據(jù)。這是非常慢的。另外,解釋少量腳本和 HTML,將導(dǎo)致在腳本引擎和 HTML 之間切換,也降低了性能。因此,請使用下面技巧:用對 Response.Write 的一個調(diào)用,替換內(nèi)嵌的密集組合表達(dá)式。例如,在下面范例中,每行每字段有一個對響應(yīng)流的寫入,每行都有許多 VBScript 和 HTML 之間的切換:
<table> <% For Each fld in rs.Fields %> <th><% = fld.Name %></th> <% Next While Not rs.EOF %> <tr> <% For Each fld in rs.Fields %> <td><% = fld.Value %></td> <% Next </tr> <% rs.MoveNext Wend %> </table>
<table> <% For each fld in rs.Fields Response.Write ("<th>" & fld.Name & "</th>" & vbCrLf) Next While Not rs.EOF Response.Write ("<tr>") For Each fld in rs.Fields %> Response.Write("<td>" & fld.Value & "</td>" & vbCrLf) Next Response.Write "</tr>" Wend %> </table>
流行的瀏覽器具有對以下功能的高級支持,例如 xml、DHTML、java 小程序以及遠(yuǎn)程數(shù)據(jù)服務(wù)。請盡量利用這些功能。所有這些技術(shù),都可以通過執(zhí)行客戶端的驗證和數(shù)據(jù)緩存,減少了與 Web 服務(wù)器之間的往返。如果您正在運(yùn)行智能瀏覽器,該瀏覽器可以為您進(jìn)行一些驗證(例如,在運(yùn)行 POST 之前檢查信用卡的校驗和否有效)。重申一次,請盡量使用這些功能。由于削減了客戶端到服務(wù)器的往返路程,將減少對 Web 服務(wù)器的壓力,并且削減了網(wǎng)絡(luò)通信量(雖然發(fā)送給瀏覽器的初始頁面可能更大),服務(wù)器訪問的所有后端資源也削減了。而且用戶不必經(jīng)常提取新頁,使用戶的感受好一些。這并不減輕對服務(wù)器端驗證的需要。還是應(yīng)該經(jīng)常進(jìn)行服務(wù)器端的驗證。這樣能夠防止由于某些原因從客戶端來的壞數(shù)據(jù),例如黑客,或者不運(yùn)行客戶端驗證程序的瀏覽器。
許多站點由獨立于瀏覽器創(chuàng)建的 HTML 組成。這一點經(jīng)常阻礙開發(fā)人員利用可以提高性能的流行瀏覽器功能。對于真正高性能的、必須關(guān)心瀏覽器的站點,良好的策略是針對流行的瀏覽器優(yōu)化您的頁面。在 ASP 中使用“瀏覽器性能組件”,很容易檢測到瀏覽器的功能。諸如 Microsoft FrontPage 等工具,能幫助您設(shè)計使用所希望的目標(biāo)瀏覽器和 HTML 版本的代碼。更詳細(xì)的討論,請查看 When is Better Worse? Weighing the Technology Trade-Offs(英文)。
技巧 20:在循環(huán)中避免字符串串聯(lián)
許多人在循環(huán)中創(chuàng)建類似這樣的字符串:
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