asp Response.flush 即時顯示進度

來源:互聯網
上載者:User

寫程式的人在編寫由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 to 2000
for i1=1 to 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 to 256
liji=liji&"<!--先產生256個字元-WWW.PIAOYI.ORG-->"
if len(liji)>=256 then exit for
next
%>
如果你有不同的看法,或有不同的實驗結果,歡迎與我一起討論。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.