记忆盒子

把记忆装进灰色的盒子,封装起来,那年那月,重新拾起。

首页搜索目录
search
当前主题: 互联网络

Asp Response.Flush 无效的三个原因

作者:Kaka    时间:2017-8-10 14:43:25    浏览:    评论:0

asp可以使用response.flush来输出缓冲,使进度可视化,多用于要输出大量数据的程序里。不过,在使用过程中,flush有时不一定有效,我为此足足研究了半天,最终发现有两个意想不到的原因导致flush无效。

原因一:开头没有设置 Response.Buffer = true

在网页代码的开头处,不要缺少语句:

<% Response.Buffer = true %>

这是声明允许输出缓冲的意思。

我想这个失误一般人都不会犯了,更加可能的原因是后面两个。

原因二:GZip压缩导致Flush无效

如果网站启用了GZip压缩,那么会导致flush不一定有效,但也不一定,这要视乎GZip的配置文件MetaBase.xml如何配置。

MetaBase.xml文件的位置在:C:\WINDOWS\system32\inetsrv\,打开这个文件,查找 IIsCompressionScheme ,这里是设置GZip的地方。

找到 HcDynamicCompressionLevel 这行,它的值默认是0,但是很多人会设为9,因为设为9时压缩率更高一点。然而,当此值为9时,Asp的Flush便变得无效了。此值设为0时,Flush是有效的。

那么0与9对压缩的影响有多大差异?经测试发现,5KB的文件,0时发送到浏览器的体积是0.27KB,9时发送到浏览器的体积是0.19KB。可见设为9时压缩率会大一些,这正是很多人设为9的原因。但如果要想Asp的Flush有效,那么就要牺牲一点压缩率了。

GZip压缩导致Flush无效

GZip压缩导致Flush无效

如果你的网站没有启用GZip,那就说明你的Asp Response.Flush无效不是这个原因,请看下面的第三个原因吧。

原因三:网页字符太少导致flush不起作用

网页字符太少是什么意思?就是在Flush之前的html字符太少了,也会导致看不到Flush的效果。

这个原因我想大多数人都没有想到,包括我们看到很多范例,程序没有问题,但是就是看不到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字节的字符串,这时Flush的效果就出来了。

为什么要这样?是因为缓冲有一个最少字节数,当网页开头的HTML代码长度达不到最少字节数要求时,用Flush输出缓冲就无效了。

x

标签: Asp  

※ 网站速度慢?试试网站自动优化工具 ※

上一篇: url rewrite重写模块使用教程【两种使用方法】
下一篇: GZip怎样设置HcDynamicCompressionLevel和HcOnDemandCompLevel

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客                   QQ交流群(312716741)

  • 通过Google订阅本站 通过鲜果订阅本站 通过抓虾订阅本站
  • 通过QQ邮箱订阅本站 通过Yahoo订阅本站 通过有道订阅本站

Search

最新评论及回复

最近留言

网站分类

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.