日期:2011-07-24  浏览次数:20798 次

ASP是微软推出的一种服务器端命令执行环境,它可以使你轻松的制作交互式的WEB应用程序。作为目前NT平台上开发WEB服务器的一种使用最多的技术,它的出现取代了过去只有使用CGI技术才能做的许多事情,而且ASP对于数据库的控制简单有效,省去了CGI的大量编程工作。

  由于ASP直接对服务器进行操作,因此,ASP设计的技巧就显得非常重要,不当的ASP应用程序会增加WEB服务器的负担,降低服务器的性能。我总结了一年来自己ASP设计的经验,希望能对大家有所帮助,不对的地方希望大家指正。

  本文讨论的主要是ASP程序的性能提升技巧,它包括两个部分:

  * HTML页面性能的提升技巧

  * ASP程序的反应时间提高的技巧

  下面我就分别详细的讨论一下这两个方面。

  1. 提高HTML页面的性能几个技巧

  HTML页面的性能主要和客户端的计算机的性能有关,总的来说,主要和客户端的计算机的硬件以及客户所拥有的带宽密切相关,除此之外,有几个因素也以影响HTML页面的性能:

  大家都知道,页面越小,在浏览器中加载的时间就会越少,性能也越好。以下是减少页面大小的几个有用的技巧:

  (1) 减少图象的数量:当你的页面中含有N幅图象的时候,你的浏览器就会向WEB服务器发出N次请求,这样就会浪费大量的时间,在带宽比较窄的情况下尤其要避免在面中插入大量的图象。

  (2) 减少框架的使用量:框架是另外一个降低页面显示速度的元素,就象图象一样,浏览器会向服务器发出N次请求,因此,也要避免大量的框架使用。

  (3) 避免使用表格:虽然一个漂亮的页面少不了表格,但是我们应该减少不必要表格的使用,这样会加快页面的加载速度。

  (4) 不要在HTML中加入注释

  (5) 避免使用长文件名,养成使用相对路径的习惯。

  (6) 不必要的时候,不要使用脚本,否则会降低页面的显示速度。

  2. 提高ASP程序反应时间的几个技巧

  进一步的分,提高ASP的反应时间又涉及到三个方面的内容:

  * ASP本身的性能的提升技巧

  * 网络带宽

  * 数据库性能的提升技巧

  下面我就分别详细的讲述一下这三个方面的内容.

  A. ASP页面本身的性能的提升技巧

  (1)读取对象变量总是慢于读取本地变量,因此,应该养成把对象变量转存到本地变量的的习惯,这样会提高ASP的反应时间,下面的这两个例子就是一个很好的对比:

  慢的例子:

  if Myobj.Value = 0 then

  Do 略

  elseif Myobj.Value > 0 then

  Do 略

  elseif Myobj.Value < 0 then

  Do 略

  end if

  比较快的例子:

  MyVar = Myobj.Value

  if MyVar = 0 then

  Do 略

  elseif MyVar > 0 then

  Do 略

  elseif MyVar < 0 then

  Do 略

  end if

  上面比较快的例子虽然只是作了一个小小的改动,但在性能上却有不少的提升。


 (2)如果你正在使用的是VBScript 5.0或更高的版本,你可以使用WITH……END WITH的结构,这样也能使ASP的性能提高不少。

  (3)一般情况下,避免使用session变量,因为每一个session变量都占用一个线程,session调用是一个接一个的完成的。所以这样会降低ASP的速度,你可以使用QueryString集合或者隐藏的变量来代替session变量来存储数据。这样会比使用session变量占用的线程少。

  (4)如果你实在无法避免使用session变量,而且你有大量session变量,那么你应该考虑使用字典对象。

  (5)打开缓存会提高ASP的性能,如在每一个ASP页面中使用Response.Buffer=True就是一个很好的习惯,它能明显的提高页面的显示速度。

  (6)把你的数据读取的代码打包成COM组件,你会领略到编译和多线程给你带来的速度上的提升。众所周知,创建一个数据库的连接会耗费大量的资源和时间,怎么能解决这个问题呢?当你的组件运行在Microsoft Transaction Server (MTS)时,利用连接池能很好的解决这个问题。MTS是一个以WINDOWS NT为基础的一项技术,当和DCOM联合使用的时候,它允许你更好的把COM对象在网络上分布,效果比单独使用DCOM更好。

  (7)避免多次调用COM组件,例如,如果你想向COM组件中写入10个值,你得调用10次COM组件,如果你能只调用一次,那么就能大大提高整体性能。

  (8)不要和application或session 范围一起声明象ADO连接对象这样的COM组件,因为这些多线程组件的线程调用之间还得协调,因此大大降低了ASP的性能。

  (9)当你的ASP页面中的代码超过100行,你最好考虑将它们移植到COM组件,ASP脚本是在运行的时候解释,而COM组件是经过编译的。

  (10)不要使用Microsoft Word 或Excel组件来操作数据,这些组件对于ASP都是没有经过优化的。

  (11)我们开发WEB应用程序的时候,总是喜欢创建一个大的include文件包含所有的全球变量,但是这个方法的最大弊病就是并不是所有的页面都需要这些变量,而每个页面都要处理这些变量,因而会大大影响ASP的速度。

  (12)避免多次使用Request.Write,最好将他们整和到一个Request.Write中。

  B.网络带宽

  (1) 尽量使用100M的网卡,这样会大大提高ASP应用程序的反应时间。

  (2) 如果你的WEB服务器和数据库在同一个服务器上,建议将它们移植到不同的数据库上。

  (3) 建议将COM组件和MTS一起使用。

  C.数据库的性能的提升技巧

  一种好的数据库设计方法可以大大的提高ASP程序的性能,详细的论述这方面的内容已经超出了本文的范围,在此我只简要的介绍几个技巧。

  (1) 使用ADO Recordset的时候,注意使用cursor type 和lock type两个属性,例如,如果你想填充组合列表的话,应该把cursor type设为 adOpenForwardOnly并且 lock type 设为adLockReadOnly。

  (2) 有时合适的分配一些数据库的缓存可以很好的提高ASP的性能。例如,如果你使用Oracle作为数据库的时候,一个连接要开三个对话,如果你能很好的降低连接的数目的话,那么你的ASP性能将会大副提升。

  (3) 注意使用正确的数据库查询语句,范围过大的查询动作会浪费大量的时间,因此一定要想方设法缩减查询范围,提高查询速度。

  本文到此就写完了,我再次声明一下,如果文章中有不对的地方,恳请大家回信指正,也希望广大的ASP爱好者来信互相切磋。