asp下Response.Buffer提速

來源:互聯網
上載者:User

for i=1 to 256
yongfa365=yongfa365&"<!--這裡主要是讓前邊先產生256個字元,這樣才可以即時輸出-->"
if len(yongfa365)>=256 then exit for
next
MadeBasic()
MadeModel()
MadeIndexBlogItem()
response.Write "1/6所有模版產生完成<br>"&yongfa365
Response.Flush()
MadeIndex("Calendar")
response.Write "2/6日期索引產生完成<br>"
Response.Flush()
MadeIndex("Category")
response.Write "3/6分類索引產生完成<br>"
Response.Flush()
MadeIndex("Blog")
response.Write "4/6總索引產生完成<br>"
Response.Flush()
MadeRSS()
response.Write "5/6RSS產生完成<br>"
Response.Flush()
MadeItem("all")
response.Write "6/6所有文章產生完成<font color=red>OK,終於完成了</red>"
Response.Flush()

以上為後台動態產生靜態檔案一段代碼,目的是讓自己可以看到程式執行到哪了,以前沒加Response.Flush()就只看那IE狀態列裡的進度條,感覺好鬱悶,加上Response.Flush()後,感覺就一個字“爽”,下邊是從網上找的一些參考資料彙集:

  不知道大家對Buffer瞭解多少,很多人對這個概念都比較模糊,尤其是在asp中。很多初學者在編寫asp程式時很少用到這條語句,下面我就來說說Buffer的用途以及它在asp程式中的作用。

一、Buffer

  Buffer從英文直譯過來的意思是“緩衝區”,這裡我們將它稱為緩衝,因為它不僅是個名詞,還是個動詞。
  緩衝區是儲存一系列的資料的地方,用戶端所獲得的資料可以從程式的執行結果直接輸出,也可以從緩衝區輸出。但是這兩種方式在速度上是有差異的:在web中,當一個asp程式被請求的次數不多時,二者基本上沒有什麼差異,至少我們感覺不出來。但是當有很多人請求一個asp程式時,速度可就不一樣了。如果沒有緩衝區,那麼每個請求asp程式的人的用戶端所得到的結果都是asp程式執行一次所得到的結果,而如果預先將asp程式緩衝,那麼每個用戶端所得到的結果就是緩衝區的結果,不是執行一次程式的結果。比如有1000個使用者同時訪問一個asp頁面,如果這個asp程式沒有緩衝,那麼程式將被執行一千次,這樣伺服器的負荷就回加大,從而導致用戶端開啟頁面速度變慢;如果這個asp程式被緩衝了,那麼結果就不一樣了,每個用戶端直接從緩衝區獲得資料,伺服器將不會因為訪問增加而增加程式執行次數,因此用戶端開啟頁面的速度也就比上一種情況要快。這就是Buffer的好處。

二、如何將asp程式緩衝

  這個問題其實很簡單,只要在asp程式的第一行加上:
<% Response.Buffer = True %>
就可以了。
這句話的意思就是指明輸出頁面是否被緩衝,當屬性值為True時,伺服器將不會向用戶端發送任何資訊,直到所有程式執行完或者遇到
<% Response.Flush %>或<% Response.End %>
語句,才會釋放緩衝區的資訊。
  利用 Response.Buffer=True,Response.Flush 可以增進瀏覽速度,如果一個頁面 Response.Buffer=False,有30個資料轉輸,若有 100 人瀏覽此頁面,則有 3000 個來回傳輸,嚴重影響效率;若在起始得設定 Response.Buffer=True,再將整個頁面分為幾個群組,在適當的地方搭配 Response.Flush,則可大幅改善瀏覽者的體驗。

三、為什麼有時會感覺沒有用
比如:
<%
'警告:沒事別運行這個
for i=1 to 10000
Response.Write "<b><center><font color=""#FF0000"">我是www.yongfa365.com"&i& "呀</font></center></b>"
Response.Flush
response.Clear
next
%>
半天才會出來,而且出來的是一堆,然後才一個一個的接著出來。

原因:

Response.Flush()。他會將緩衝區中編譯完成的資料先發送到用戶端
但是
flush的內容至少要有256位元組。也就是只有編譯產生了至少256位元組的資料,才能在執行Response.Flush()以後將資訊發到用戶端並顯示。

Clear 方法
Clear 方法刪除緩衝區中的所有 HTML 輸出。Clear 方法只刪除響應本文而不刪除響應標題
文法
Response.Clear
注釋
調用 Response.Clear 將清楚本頁面前面部分所輸出的資料,同時,如果程式設定了 Response.ContentEncoding,Response.Clear 將同時將編碼方式設定為直接傳送。
應用於Response 對象

四、總結

  Response的Buffer屬性雖然能夠提高頁面顯示速度,但是也要分什麼情況。如果你正在製作一個普通的個人首頁,訪問量不是很高,並且沒有什麼複雜的執行程式,那麼用不用這個屬性就不是很重要,因為將資料緩衝也需要一段時間,只不過我們感覺不到罷了;但是如果你正在製作一個大型論壇或者一個產品展示或其他的商務網站,並且訪問量很高,那麼我建議在程式的第一行加入<% Response.Buffer = True %>這句話,因為這樣能夠讓客戶在有效時間內獲得更多的資料。

附:

一般驗證碼裡檔案頭裡有這個
Response.Buffer=false
Response.Expires=0
Response.ExpiresAbsolute = Now() - 1
Response.AddHeader "Pragma","No-Cache"
Response.AddHeader "Cache-Control","Private"
Response.CacheControl = "No-Cache"
就是為了不讓其有緩衝。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.