最优化ASP程序性能(转)


    Active Server Pages可以让动态页面很快地执行,但是,在代码中和数据库的连接上加入一些技巧,就能让程序更快地执行。这是一篇关于如何精制脚本程序以及ASP特征来达到最大速度的文章。任何在用户点击按钮到在屏幕上出现结果间延迟都会让用户茫然,对于一个商业站点,这就意味着潜在的用户损失。 
ASP脚本的尺寸


   我们也许不能控制用户的带宽,但是通过优化ASP站点,我们的确能够使应用达到最佳性能。许多潜在的性能收获可以通过系统调整,而不是改变代码。

   因素

   首先,有哪些因素可能影响ASP程序的性能?很不幸,有许多吗?这里仅仅是一些:

有限的带宽 
服务器端的处理器和其他硬件的速度 
在服务器上运行的其他进程(比如那些OpenGL屏幕保护程序中的一个) 
数据库连接模式,连接池,或者单独的数据库(比如Oracle、SQLServer、Access) 
使用的语言 
存储过程和SQL 
使用未编译组件,而不是VB或者JavsScript的ASP 
良好的编程习惯,比如对错误的处理 
   对于一个有经验的具备良好IIS知识的开发者来说,以上一些特征是很平常的,但是另外一些可能非常复杂。在这篇文章中,让我们来研究一下如何做才能节省毫秒级别的时间,而不是试图面面俱到。

   你的ASP脚本程序对于实现的功能是否显得过长?这就会从开始影响程序的性能。对于收集信息和格式化输出,ASP脚本是非常有用的,但是脚本是按照行来解释执行的,所以代码越长,执行时间越长。

   如果有一个很长的ASP脚本程序,怎么样才能减少长度呢?这里有一些建议。

   你可以将它们转换为服务器端组件,换言之,就是创建一个Visual Basic DLL文件,或者使用任何现代的Windows 程序语言和COM兼容语言来建立一个未编译组件,并且在服务器上注册。关于这个功能的教程请参阅http://www.webdevelopersjournal.com/articles/activex_for_asp.html。一个编写很好的ActiveX组件不仅能大幅度提高速度,而且,它还能大大地提高你的软件的保护程度,特别是你为第3方开发ASP程序时。

   因为脚本是一行行解释执行的,所以排除多余的脚本或者建立有效率的脚本,就能提高程序性能。如果在一个单一页面中有成百行的ASP脚本,你就可能很好地将程序分割成用户、商业和数据服务部分。实际上,如果这么做了,你就会发现一些多余的代码。比如,如果需要显示几个表格,就可以编写一个通用的表格显示函数,这样,在需要的地方调用就可以了。

   与尺寸相关的另外一个问题就是包含文件的长度。当执行一个#include文件时,整个文件都被调入,就象在被包含的文件中存在一样。所以,如果有一个甬余的包含文件,其中包含了许多全局方法和变量定义,那么就请注意它们将被调入每一个包含它们的文件中,而不管是否可用。ASP缓存了所有的扩展代码,导致了效率低下的搜索。在这种情况下,包含文件必须变小。尽管包含文件被服务器处理为单独的请求,但是过多的使用#include,就会导致下载时间的过度增加。

< !-- #include file="Header.asp" -- >
< !-- #include file="Footer.asp" -- >
< SCRIPT language="vbscript" runat="server" >

Sub Main() 
WriteHeader 
WriteBody 
WriteFooter 
End Sub

Sub WriteBody() 
...
End Sub

Main 'call sub Main 
< /SCRIPT >

   如果脚本很长,注意要使用 Response.IsClientConnected 命令,这将避免因客户端不再连接时CPU浪费运行循环。

< % 
'check to see if the client is connected
If Not Response.IsClientConnected Then 
'still connected so proceed 
Else 
'disconnected 
End If
% >

分散ASP代码和HTML语言命令
有人这么做吗?当描述表格时,在ASP和HTML进行切换,比如:

< HTML >
< BODY >
< %
Set MyConn = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("sample.mdb")
MyConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
SQL_query = "SELECT * FROM Friends"
Set RS = MyConn.Execute(SQL_query)
WHILE NOT RS.EOF
% >
< LI >< %=RS("Name")% >: < A HREF="< %=RS("Link")% >" >Homepage< /A >
< %
RS.MoveNext
WEND
% >
< /BODY >

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值