asp中Response.Buffer, Response.Flush的作用

2010年06月28日 17:03 by:lao8

Response.Buffer=True就是在缓存网页

访问网站一般是程序直接输出网页结果,或从缓存中读取网页结果2种方式。两种方式在速度上是有差异的:

当asp程序访问人数不多时速度感觉不出来。但是当有很多人请求一个asp程序时,如果没有缓冲区,那么每次访问都要asp程序重新执行一次,如果asp程序缓冲了,那么每次访问就可以直接从缓冲区的读取结果了。

比如有1000个人同时访问同一个页面,如果这个asp程序没有缓冲,那么程序将被执行一千次,这样服务器的负荷加大导致打开速度变慢;如果这个asp程序被缓冲了,那么结果就不一样了,每个客户端直接从缓冲区获得数据,服务器将不会因为访问增加而增加程序执行次数,因此客户端打开页面的速度也就比上一种情况要快。这就是Buffer的好处。

asp网页中设置缓存的方法只要在第一行加上:<% Response.Buffer = True %>就可以了。

注意:设置 Response.Buffer = True 时直到程序执行完或者遇到<% Response.Flush %>或<% Response.End %>语句,才会释放缓冲区的信息。

 

Response.Flush() 是执行到这里就立刻输出到浏览器中

注意:内容至少要有256字节

例子:

  1. for i=1 to 256
  2.   str=str&"<!--这里是先产生256个字符-->"
  3.   if len(str)>=256 then exit for
  4. next
  5.                 response.Write "输出第1行完成<br>"
  6.                 Response.Flush()
  7.                 response.Write "输出第2行完成<br>"
  8.                 Response.Flush()
  9.                 response.Write "输出第3行完成<br>"
  10.                 Response.Flush()
  11.                 response.Write "输出第4行完成<br>"
  12.                 Response.Flush()
  13.                 response.Write "输出第5行完成<br>"
  14.                 Response.Flush()
  15.                 response.Write "<font color=red>OK,最后一行完成</red>"
  16.                 Response.Flush()

以上代码可以看到程序执行到哪了,以前没加Response.Flush()就只看那IE状态栏里的进度条。

 

Response.Clear 方法删除缓冲区中的所有HTML输出。Clear 方法只删除响应正文而不删除响应标题

如果程序设定了 Response.ContentEncoding,Response.Clear 将同时将编码方式设定为直接传送。


总结:利用 Response.Buffer=True,在适当的地方搭配 Response.Flush,则可大幅改善浏览者的体验。

【答疑】

为什么Response.Flush有时会感觉没有用?

比如:

  1. <%
  2. for i=1 to 5000
  3.  Response.Write i&"<a href=http://www.lao8.org>老吧博客</a><br /> "
  4.  Response.Flush
  5.  response.Clear
  6. next
  7. %>

半天才会出来,而且出来的是一堆,然后才一个一个的接着出来。

原因:Response.Flush()。他会将缓冲区中编译完成的数据先发送到客户端,但是flush的内容至少要有256字节才能将信息发到客户端并显示。

 

取消缓存,防止用户通过后退按钮重复提交表单的代码示例:

  1. <%
  2. Response.Buffer=false
  3. Response.Expires=0
  4. Response.ExpiresAbsolute = Now() - 1
  5. Response.AddHeader "Pragma","No-Cache"
  6. Response.AddHeader "Cache-Control","Private"
  7. Response.CacheControl = "No-Cache"
  8. %>