设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> ASP技术 >> 性能优化 >> 正文
最新信息
·ASP 中健壮的页结构的异常…
·Url ReWriting 示例
·改进 ASP 应用程序中的字符…
·关于"&"运算符效率低下的问…
·加速ASP程序的显示速度
·对你的ASP程序作负载测试
·ASP提速技巧五则
·用数据绑定实现高效率动态…
·不用 EOF 以加快记录循环
·对《在ASP中改善动态分页的…
资料搜索
热点信息
·加速ASP程序的显示速度
·ASP特殊字符过滤
·asp内存和速度优化
·微软建议的ASP性能优化28条…
·提高ADO性能的优秀经验
·asp性能测试第二部分(十一…
·改善ASP性能和外观的技巧集…
·ASP提速技巧五则
·如何增强ASP程序性能(4)
·Asp编码优化技巧8则
推荐信息
·改进 ASP 应用程序中的字符…
·提高ASP性能的最佳选择
·微软建议的ASP性能优化28条…
·asp内存和速度优化
·ASP特殊字符过滤
·提高ADO性能的优秀经验
·ASP实用技巧28则
·加速ASP程序的显示速度
·ASP中使用Session变量的优…
·优化你的ASP程序


Google
 
最优化ASP程序性能(一)
〖编辑:Cloudy | 浏览:人次〗

    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 >

   另外一个例子是使用If命令:

< %
  If Not Session("DBOpen") Then
% >
< H1 >Database not connected< /H1 >
< %
  Else
% >
< H1 >Database open< /H1 >
< %
  End If
% >

   在以上2个例子中,脚本性能能通过保持ASP程序块在服务器端以及使用Response.Write来产生HTML代码来提高性能,就象下面一样:

< %
If not Session ("DBOpen") Then
   Response.Write "< H1 >Database not connected< /H1 >"
Else
   Response.Write "< H1 >Database open< /H1 >"
End If
% >

对于大且长的脚本,你可以通过上面的方法看到明显的性能提高。
   会话状态

   毋庸置疑,通过session在ASP中保持状态是一个非常重要的特征。然而,这将影响程序的性能。很明显,服务器的伸缩性因为session仅仅能局限于单一服务器而变成一个问题,一个session为每一个用户都要消耗资源。

   如果不使用session变量,而且实际上也可能不需要,因为使用隐藏表单域、在数据库中存储数值以及使用查询字符串可以完成session的功能,这时,就应该屏蔽session状态,代码如下:

   @EnableSessionState = False

   这样,ASP就将不再检查session信息。

   如果确实要依靠session状态,那么请避免在session对象中存放大量的数据。如果设置了客户端的HTTP Cookies,那么IIS中的Session是生效的,并且直到session被中止或者到期,为每一个session分配的内存空间将一直保留。由于这个原因,当有许多并发用户访问站点时,资源将会很快耗尽。


录入时间:2006-05-11 19:33:28 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号