如何增强ASP程序性能(3)(2)
这存在几个问题。首先是重复的连接字符串消耗二次方的时间,而且,运行的时间与计算的字段数量也是平方的关系。下面的简单例子更清楚地说明这一点:
s = ""
for i = asc("a") to asc("z")
s = s & chr(i)
next
在第1层循环时,s的值是“a”;第2层循环时,vbscript要重新分配字符串,拷贝了2个字符(“ab”)到s中;第3层循环时,需要再重新分配并且拷贝3个字符到s中。在第n层循环时,就需要重新分配并拷贝n个字符到s中。那就是1+2+3+...+n的总和,也就是n*(n+1)/2个拷贝。
在上面的记录集例子中,如果有100个记录和5个字段,内部循环就要执行100*5=500次,并且,完成所有拷贝和再分配任务的时间将接近500*500=250,000。这还是一个适当尺寸记录集的拷贝工作。
在这个例子中,可以通过替换字符串连接为response.write()或者行内脚本(< % =fld.value % >)的方法提高程序性能。如果response buffering打开(也应该打开),这将很快,因为response.write仅仅附加数据在缓冲区的尾部,而且不需要再分配。
如果用jscript连接字符串,强烈建议使用“+=”操作符,就是说,使用s+=“字符串”,而不是s = s+“字符串”。
技巧15:打开浏览器和代理的缓冲
默认情况下,asp禁止了浏览器和代理的缓冲功能。如果有一个每次都不要更新的页面,就应该打开浏览器和代理的缓冲,这将允许浏览器和代理在一段时间内使用该页面的“缓冲”拷贝数据。缓冲能够大大地减轻服务器的数据转载量,并提高用户的浏览性能。
哪些类别的动态页面适合被缓存呢?下面是一些例子:
天气页面,每5分钟更新一次
新闻或版本列表页面,每天更新2次
注意:使用浏览器或者代理缓存后,对web服务器的点击次数就会减少。如果想精确地了解所有页面,或者对于邮递广告,就不适于使用浏览器和代理缓存了。
浏览器缓存由http“expires”头参数控制,它由web服务器发送给浏览器。asp提供了2个简单的方法发送这个头部参数。设置页面在未来一定时间内到期,可以使用response.expires属性。下面的例子将告诉浏览器内容在10分钟后过期:
< % response.expires = 10 % >
设置response.expires为负数或者0,就禁止了缓存。对第2个属性response.expiresabsolute的设置,允许指定在一个特殊时间到来时内容过期。
< % response.expiresabsolute = #may 31,2001 13:30:15# % >
除了使用response对象来设置到期时间,还可以在html文件头部写< meta >标记。尽管代理不会注意到这个标记,但是一些浏览器可以。
< meta http-equiv="expires" value="may 31,2001 13:30:15" >
最后,对于http代理,使用response.cachecontrol可以指示是否缓存内容。设置属性为“public”,打开代理缓存内容的功能。
< % response.cachecontrol = "public" % >
默认情况下,这个属性是设置成“private”的。注意:不要让代理缓冲那些显示给特定用户的页面,因为代理可能会将属于其他用户的页面送给当前用户。 [iocblog.net 来源]
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。