如果你知道Response.Flush和Response.Clear,那你就可以不用這樣的等待了。每產生一個Html頁面,就用Response.write立即傳回一則訊息,提示該資料庫記錄已經產生Html。寫程式的人在寫由asp頁面產生靜態頁面html的時候,如果同時產生大量頁面,一定遇到過瀏覽器下方的進度條上顯示著3%,6%,10%等緩慢增長的漫長等待過程。在這個等待過程中,你不知道頁面已經產生到哪一筆記錄,只能大眼瞪小眼的等。
如果你知道Response.Flush和Response.Clear,那你就可以不用這樣的等待了。每產生一個Html頁面,就用Response.write立即傳回一則訊息,提示該資料庫記錄已經產生Html。
這樣,在同時產生大量頁面的時候,你就不再是孤獨的望著一片空白的頁面而只是瀏覽器下方緩慢變化著的進度條而發呆了,你可以隨時知道當前已經生成到哪條數據庫記錄了,即使出現意外,如死機,斷電等,你也知道下次生成應該從哪天記錄重新開始生成html了。是不是很爽呢,這就是一個進度條了而且更具體了。
呵呵,別急,我們先來看看Response.Flush和Response.Clear的意思吧。
Response物件之Flush方法,立即傳送緩衝區中的輸出。如果未將Response.Buffer 設定為TRUE,則該方法將導致執行階段錯誤。語法:Response.Flush;註:如果在ASP 頁上呼叫Flush 方法,則伺服器將回應該頁上保持活動的請求。應用於Response物件。
關於Buffer,這裡有段落介紹。 Buffer直譯英文的意思是緩衝區,這裡我們稱它為緩衝,因為它不只是個名詞,還是個動詞。
緩衝區是儲存一系列的資料的地方,客戶端所獲得的資料可以從程式的執行結果直接輸出,也可以從緩衝區輸出。但這兩種方式在速度上是有差異的:在web中,當一個asp程式被請求的次數不多時,二者基本上沒有什麼差異,至少我們感覺不出來。但是當有很多人請求一個asp程式時,速度可就不一樣了。如果沒有緩衝區,那麼每個請求asp程式的人的客戶端所得到的結果都是asp程式執行一次所得到的結果,而如果預先將asp程式緩衝,那麼每個客戶端所得到的結果就是緩衝區的結果,不是執行一次程序的結果。例如有1000個使用者同時造訪一個asp頁面,如果這個asp程式沒有緩衝,那麼程式將被執行一千次,這樣伺服器的負荷就回加大,從而導致客戶端開啟頁面速度變慢;如果這個asp程序被緩衝了,那麼結果就不一樣了,每個客戶端直接從緩衝區獲得數據,伺服器將不會因為訪問增加而增加程序執行次數,因此客戶端打開頁面的速度也就比上一種情況要快。這就是Buffer的好處。
關於Response.clear,Clear 方法刪除緩衝區中的所有HTML 輸出。但Clear 方法只刪除回應正文而不刪除回應標題。可以用該方法處理錯誤情況。請注意,如果未將Response.Buffer 設為TRUE,則該方法將導致執行時間錯誤。語法:Response.Clear;應用於Response物件。
好了,想實現立即輸出的效果,只要在循環體內的希望輸出提示訊息後面加上Response.Flush和Response.Clear就可以了。如:
<%
for i=1 至 2000
for i1=1 至 3000
''空循環,延長每次執行時間
next
Response.write i&)
Response.Flush
Response.Clear
next
%>
上述asp語句,你執行後,會發現輸出是逐一輸出的,執行一次,就輸出一次。
但我在網路上看到有人說,很多時候,我們發現即使我們使用了Response.Flush(),但是並沒有將前面的資訊發送到客戶端來顯示。呈獻給我們的依然是白屏。經過反覆的測試,我得出一個結論:就是flush的內容至少要有256位元組。也就是只有編譯產生了至少256位元組的數據,才能在執行Response.Flush()以後將訊息傳送到客戶端並顯示。
很奇怪,上述我給的語句確確實實是實現了逐個顯示的效果的,並沒有事先輸出256個字節,大家可以把上述語句另存為記事本運行看看,效果是逐行顯示的。自己所列觀點,僅代表flymorn個人觀點,不挪作他用。
如果你確實需要事先輸出256個位元組,可以如下:
<%
dim liji
for i=1 至 256
liji=liji&<!--先產生256個字元-WWW.PIAOYI.ORG-->
if len(liji)>=256 then exit for
next
%>
如果你有不同的看法,或有不同的試驗結果,歡迎與我一起討論。