許多人在循環語句中建立一個字符串,如下所示:
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 + ?某字符串?。
技巧 21:啟用瀏覽器和代理緩存
在默認情況下,ASP 禁止在瀏覽器和代理中進行緩存。這是有意義的,因為就實質而言 ASP 頁面是動態的,上面有隨時間不斷變化的潛在信息。如果頁面不要求在每個視圖上進行刷新,您應啟用瀏覽器和代理緩存。這可使瀏覽器和代理在一定的時間內使用頁面的“緩存”副本,您可以控制時間的長短。緩存可以大大減輕服務器上的負載,縮短用戶的等待時間。
哪一種動態頁面可作為要緩存的頁面呢?下面舉一些例子:
天氣預報頁面,在此頁面上,每隔 5 分鐘更新一次天氣預報。
列出新聞條目或新聞稿的主頁,它一天更新兩次。
共同基金業績列表,在此列表中,基本統計信息每隔幾小時更新一次。
注意,在使用瀏覽器或代理緩存的情況下,Web 服務器上記錄的訪問次數減少了。如果您想準確地測量所有頁面視圖或張帖公布,您就不希望使用瀏覽器和代理緩存。
瀏覽器緩存由 HTTP“過期”報頭控制,該報頭由 Web 服務器發送給瀏覽器。ASP 提供兩個簡單的機制發送此報頭。要設置頁面使其過多少分鐘后到期,則應設置 Response.Expires 屬性。下面的例子告訴瀏覽器內容在 10 分鐘內過期:
<% Response.Expires = 10 %>
若將 Response.Expires 設置為負數或 0,則禁用緩存。一定要使用大的負數,如 -1000(略多于一天),以避免服務器和瀏覽器時鐘之間的不匹配。第二個屬性 Response.ExpiresAbsolute 將使您設置內容過期的具體時間:
<% Response.ExpiresAbsolute = #May 31,2001 13:30:15# %>
您可以不使用 Response 對象設置過期時間,而將 <META> 標記寫進 HTML,通常寫在 HTML 文件的 <HEAD> 部分。一些瀏覽器將遵照此指令,而代理則不然。
<META HTTP-EQUIV=?Expires? VALUE=?May 31,2001 13:30:15?>
最后,您可以使用 Response.CacheControl 屬性,指示其內容是否可以讓 HTTP 代理緩存。若將此屬性設置為“Public”,代理就可以緩存此內容。
<% Response.CacheControl = ?Public? %>
在默認情況下,此屬性被設置為“Private”。注意,對于顯示某用戶特定數據的頁面,不應啟用代理緩存,因為代理可能給用戶提供屬于其他用戶的頁面。
文章來源于領測軟件測試網 http://www.kjueaiud.com/