記憶盒子

把記憶裝進灰色的盒子,封裝起來,那年那月,重新拾起。

首頁搜索目錄
search
當前主題: 互聯(lián)網(wǎng)絡

Asp Response.Flush 無效的三個原因

作者:Kaka    時間:2017-8-10 14:43:25    瀏覽:    評論:0

asp可以使用response.flush來輸出緩沖,使進度可視化,多用于要輸出大量數(shù)據(jù)的程序里。不過,在使用過程中,flush有時不一定有效,我為此足足研究了半天,最終發(fā)現(xiàn)有兩個意想不到的原因導致flush無效。

原因一:開頭沒有設置 Response.Buffer = true

在網(wǎng)頁代碼的開頭處,不要缺少語句:

<% Response.Buffer = true %>

這是聲明允許輸出緩沖的意思。

我想這個失誤一般人都不會犯了,更加可能的原因是后面兩個。

原因二:GZip壓縮導致Flush無效

如果網(wǎng)站啟用了GZip壓縮,那么會導致flush不一定有效,但也不一定,這要視乎GZip的配置文件MetaBase.xml如何配置。

MetaBase.xml文件的位置在:C:\WINDOWS\system32\inetsrv\,打開這個文件,查找 IIsCompressionScheme ,這里是設置GZip的地方。

找到 HcDynamicCompressionLevel 這行,它的值默認是0,但是很多人會設為9,因為設為9時壓縮率更高一點。然而,當此值為9時,Asp的Flush便變得無效了。此值設為0時,F(xiàn)lush是有效的。

那么0與9對壓縮的影響有多大差異?經(jīng)測試發(fā)現(xiàn),5KB的文件,0時發(fā)送到瀏覽器的體積是0.27KB,9時發(fā)送到瀏覽器的體積是0.19KB??梢娫O為9時壓縮率會大一些,這正是很多人設為9的原因。但如果要想Asp的Flush有效,那么就要犧牲一點壓縮率了。

GZip壓縮導致Flush無效

GZip壓縮導致Flush無效

如果你的網(wǎng)站沒有啟用GZip,那就說明你的Asp Response.Flush無效不是這個原因,請看下面的第三個原因吧。

原因三:網(wǎng)頁字符太少導致flush不起作用

網(wǎng)頁字符太少是什么意思?就是在Flush之前的html字符太少了,也會導致看不到Flush的效果。

這個原因我想大多數(shù)人都沒有想到,包括我們看到很多范例,程序沒有問題,但是就是看不到Flush的效果。

我們看看下面兩段代碼,第一段代碼的Flush是無效的,但第二段代碼的Flush就有效了。

代碼一:

<% Response.Buffer = true %>
<%
for i = 0 to 50
for n = 0 to 100000
m = n
next
response.write i & "<br>"
response.flush
next
%>

演示

代碼二:

<% Response.Buffer = true %>
<div style="display:none">
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
</div>
<%
for i = 0 to 50
for n = 0 to 100000
m = n
next
response.write i & "<br>"
response.flush
next
%>

演示

代碼二由于在前面加上了1000個1,即是在前面加上長度為1000字節(jié)的字符串,這時Flush的效果就出來了。

為什么要這樣?是因為緩沖有一個最少字節(jié)數(shù),當網(wǎng)頁開頭的HTML代碼長度達不到最少字節(jié)數(shù)要求時,用Flush輸出緩沖就無效了。

x

標簽: Asp  

※ 網(wǎng)站速度慢?試試網(wǎng)站自動優(yōu)化工具 ※

上一篇: url rewrite重寫模塊使用教程【兩種使用方法】
下一篇: GZip怎樣設置HcDynamicCompressionLevel和HcOnDemandCompLevel

發(fā)表評論:

◎歡迎參與討論,請在這里發(fā)表您的看法、交流您的觀點。

訂閱博客                   QQ交流群(312716741)

  • 通過Google訂閱本站 通過鮮果訂閱本站 通過抓蝦訂閱本站
  • 通過QQ郵箱訂閱本站 通過Yahoo訂閱本站 通過有道訂閱本站

Search

最新評論及回復

最近留言

網(wǎng)站分類

Powered By Z-Blog 1.8 Walle Build 91204 Designed by Han'space

Copyright @2009-2024 All Rights Reserved. 粵ICP備14028160號-1

Powered By Z-Blog 1.8 Walle Build 91204
Copyright @2009-2024 All Rights Reserved.