ASP技巧集锦(官方权威版)-6

技巧

  技巧 16:在开始长时间的任务之前先使用 Response.IsClientConnected
  如果用户失去耐心,他们可以在开始执行他们的请求之前放弃 ASP 页。如果他们单击了 Refresh 或跳转到服务器的其他页上,在 ASP 请求队列的末尾将有一个新的请求,而在队列的中间有一个断开连接的请求。这通常发生在服务器处于高负荷的情况下(它有一个很长的请求队列,相应的响应时间也很长),这只能使情况更糟。如果用户不再连接,将没有执行 ASP 页的点(特别是低速、重量级的 ASP 页)。可以使用 Response.IsClientConnected 属性检查这种情况。如果它返回 False,则应调用 Response.End 并放弃该页的剩余内容。实际上,每当 ASP 要执行新的请求时,IIS 5.0 便将该方法编码,来检查队列中的请求有多长。如果在那里超过了 3 秒钟,ASP 会检查客户是否仍然连接着,如果客户已断开连接,就立即结束该请求。您可以使用 metabase 中的 AspQueueConnectionTestTime 设置,调整这 3 秒的超时时间。
  如果有某页执行了很长时间,您可能还想按一定的时间间隔检查 Response.IsClientConnected。在启用响应缓冲之后,按一定的时间间隔执行 Response.Flush,告诉用户正在进行的是哪些事情,是个好办法。
  注意 在 IIS 4.0 中,Response.IsClientConnected 将不能正常工作,除非首先执行 Response.Write。如果启用了缓冲,也需要执行 Response.Flush。在 IIS 5.0 中则不必如此 - Response.IsClientConnected 工作得很好。在任何情况下,Response.IsClientConnected 都要有些开销,所以,只有在执行至少要用 500 毫秒(如果想维持每秒几十页的吞吐量,这是一个很长的时间了)的操作前才使用它。作为通常的规则,不要在紧密循环的每次迭代中调用它,例如当绘制表中的行,可能每 20 行或每 50 行调用一次。
  
  技巧 17:使用 <OBJECT> 标记实例化对象
  如果需要引用不能在所有代码路径中使用的对象(尤其是服务器 - 或应用程序 - 作用域的对象),则使用 Global.asa 中的 <object runat=server id=objname> 标记来声明它们,而不是使用 Server.CreateObject 方法。Server.CreateObject 立刻创建对象。如果以后不使用那个对象,就不要浪费资源。<object id=objname> 标记声明了 objname,但实际上 objname 此时并没有创建,直到它的方法或属性第一次被使用时才创建。
  这是迟缓计算的另一个例子。
  
  技巧 18:使用 ADO 对象和其他组件的 TypeLib 声明
  当使用 ADO 时,开发人员经常包含 adovbs.txt 来获得对 ADO 不同常量的访问权。该文件必须包含在要使用这些常量的每一页中。该常量文件非常大,给每个 ASP 页增加了很多编译时间和脚本大小方面的开销。
  IIS 5.0 提供了绑定到组件类型库的能力。允许您在每个 ASP 页上引用一次类型库并使用它。每页不需要为编译常量文件付出代价,并且组件开发人员不必为在 ASP 中的使用而生成 VBScript #include 文件。
  要访问 ADO 类型库,请将下列语句之一放入 Global.asa 中。
  <!-- METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}" -->
  或者
  <!-- METADATA TYPE="TypeLib" FILE="C:\Program Files\Common Files\system\ado\msado15.dll" -->
  
  技巧 19:利用浏览器的验证能力
  流行的浏览器具有对以下功能的高级支持,例如 XML、DHTML、Java 小程序以及远程数据服务。请尽量利用这些功能。所有这些技术,都可以通过执行客户端的验证和数据缓存,减少了与 Web 服务器之间的往返。如果您正在运行智能浏览器,该浏览器可以为您进行一些验证(例如,在运行 POST 之前检查信用卡的校验和否有效)。重申一次,请尽量使用这些功能。由于削减了客户端到服务器的往返路程,将减少对 Web 服务器的压力,并且削减了网络通信量(虽然发送给浏览器的初始页面可能更大),服务器访问的所有后端资源也削减了。而且用户不必经常提取新页,使用户的感受好一些。这并不减轻对服务器端验证的需要。还是应该经常进行服务器端的验证。这样能够防止由于某些原因从客户端来的坏数据,例如黑客,或者不运行客户端验证程序的浏览器。
  许多站点由独立于浏览器创建的 HTML 组成。这一点经常阻碍开发人员利用可以提高性能的流行浏览器功能。对于真正高性能的、必须关心浏览器的站点,良好的策略是针对流行的浏览器优化您的页面。在 ASP 中使用“浏览器性能组件”,很容易检测到浏览器的功能。诸如 Microsoft FrontPage 等工具,能帮助您设计使用所希望的目标浏览器和 HTML 版本的代码。更详细的讨论,请查看 When is Better Worse? Weighing the Technology Trade-Offs(英文)。
  
  技巧 20:在循环中避免字符串串联
  许多人在循环中创建类似这样的字符串:
  s = "<table>" & vbCrLf
  For Each fld in rs.Fields
   s = s & " <th>" & fld.Name & "</th> "
  Next
  While Not rs.EOF
   s = s & vbCrLf & " <tr>"
   For Each fld in rs.Fields
   s = s & " <td>" & fld.Value & "</td> "
   Next
   s = s & " </tr>"
   rs.MoveNext
  Wend
  s = s & vbCrLf & "</table>" & vbCrLf
  Response.Write s
  这种方法有几个问题。首先,重复连接字符串所花费的时间,以二次方曲线的速率增长;粗略地计算,运行循环所花费的时间,与记录数乘以字段数的平方成正比。举一个简单的例子,便能清楚地说明这一点。
  s = ""
  For i = Asc("A") to Asc("Z")
   s = s & Chr(i)
  Next
  在第一次迭代中,得到一个字符的字符串“A”。在第二次迭代中,VBScript 必须重新分配字符串并复制两个字符“AB”到 s。在第三次迭代中,它必须再次重新分配 s,并复制三个字符到 s。在第 N 次(26 次)迭代中,它必须重新分配并复制 N 个字符到 s。就是 1+2+3+...+N 的和,为 N*(N+1)/2 次复制。
  在以上记录集的例子中,如果有 100 条记录和 5个字段,则内部的循环将执行 100*5 = 500 次,并且完成所有复制和重新分配所花费时间,将与 500*500 = 250,000 成正比。对一个大小适度的记录集,将有很多次复制。
  在该例子中,代码可以改进:字符串的连接将被 Response.Write() 或内嵌脚本 (<% = fld.Value %>) 所替代。如果打开响应缓冲,这个操作将会很快,因为 Response.Write 仅仅将数据添加到响应缓冲的末尾。不再重新分配,因而非常有效。
  特别是在将 ADO 记录集转换到 HTML 表时,请考虑使用 GetRows 或 GetString。
  如果用 JScript 连接字符串,强烈建议使用 += 操作符;即用 s += "某字符串", 而不是 s = s + "某字符串"。

时间: 2024-11-02 10:24:25

ASP技巧集锦(官方权威版)-6的相关文章

ASP技巧集锦(官方权威版)-1

技巧 简 介 性能是一个特性.您需要预先设计性能,或是在日后重新编写应用程序.换句话说,什么是最大限度优化 Active Server Pages (ASP) 应用程序性能的好策略? 本文为优化 ASP 应用程序和"Visual Basic(R) 脚本编辑器 (VBScript)"提供了许多技巧.对许多陷阱和缺陷进行了讨论.本文所列的建议均在 http://www.microsoft.com 及其他站点上进行了测试,而且工作正常.本文假定您对 ASP 开发有基本的理解,包括对 VBSc

ASP技巧集锦(官方权威版)-2

技巧 技巧 3:在 Web 服务器磁盘上缓存数据和 HTML 有时,数据过多不能在内存中进行缓存."过多"是一种定性的判断:它取决于打算消耗的内存量,还有缓存项的数量和这些项的检索频率.总之,如果有过多的数据要在内存中缓存,请考虑以文本或 XML 文件的形式,在 Web 服务器的硬盘上缓存数据.可以将在磁盘上缓存数据和在内存中缓存数据组合起来,为站点建立最优的缓存策略. 注意,在度量单个 ASP 页的性能时,在磁盘上检索数据不一定比从数据库中检索数据快.但是,缓存减轻了数据库和网络的负

ASP技巧集锦(官方权威版)-3

技巧 技巧 6:妙用 Session 对象 在肯定了在 Applications 和 Sessions 中缓存的优点之后,我们建议您避免使用 Session 对象.下面将会谈到,当用于忙碌站点时,Sessions 有几个缺点.所谓忙碌,通常是指站点每秒请求数百页或同时有数千个用户.该技巧对于必须进行水平扩展的站点,即那些利用多个服务器来适应负载或执行容错功能的站点来说,更加重要.对于较小的站点,如 intranet 站点,Sessions 的便利,与开销相比也是值得的. 为了翻新,ASP 自动为

ASP技巧集锦(官方权威版)-4

技巧 技巧 9:进程外的执行将牺牲可靠性 ASP 和 MTS/COM+ 都有允许您以可靠性换取性能的配置选项.当建立和部署应用程序时,应当理解这种交换. ASP 选项 ASP 应用程序可以配置为以三种方式之一运行.在 IIS 5.0 中引入了术语"隔离级"来描述这些选项.三个隔离级值分别是低.中和高: 低级隔离.该隔离级在所有版本的 IIS 中受到支持,并且是最快的.它在主 IIS 进程 Inetinfo.exe 中执行 ASP.如果 ASP 应用程序崩溃,则 IIS 也将崩溃.(要在

ASP技巧集锦(官方权威版)-5

技巧 技巧 13:避免重新定义数组 尽量避免 Redim 数组.从关心性能的角度来说,如果计算机受物理内存的限制,最好一开始将数组的维数设置为最差方案 - 而不要将维数设置为最佳方案,再根据需要重新定义维数.这并不意味着明知道不需要那么多而就是应该分配太多的内存. 下面代码展示了您没有必要地使用了Dim 和 Redim 来解决. <% Dim MyArray() Redim MyArray(2) MyArray(0) = "hello" MyArray(1) = "go

ASP技巧集锦(官方权威版)-7

技巧 技巧 21:启用浏览器和代理缓存默认情况下,ASP 禁用浏览器和代理中的缓存.这将很有意义,因为 ASP 生来就是动态的,具有潜在地对时间敏感的信息.如果有一个不需要对每次查看进行刷新的页,则应该启用浏览器和代理缓存.这使得浏览器和代理能在某一段时间内,使用某一页的缓存副本,这时间的长短可以控制.缓存能明显减轻服务器负荷,使用户的感受好一些.哪种动态页可以缓存?举例说明:天气页,每 5 分钟更新一次.列出新闻的主页或新闻发布的主页,每天更新 2 次. 公共基金运营列表,基本的统计数小时更新

改进性能和样式的24个ASP 技巧

技巧|性能 1.ASP技巧集锦(官方权威版)-7 [2005-02-23]     2.ASP技巧集锦(官方权威版)-6 [2005-02-23]     3.ASP技巧集锦(官方权威版)-5 [2005-02-23]     4.ASP技巧集锦(官方权威版)-4 [2005-02-23]     5.ASP技巧集锦(官方权威版)-3 [2005-02-23]     6.ASP技巧集锦(官方权威版)-2 [2005-02-23]     7.ASP技巧集锦(官方权威版)-1 [2005-02-

ASP开发44条技巧集锦之一

技巧 下一节:ASP开发44条技巧集锦之二 1. 几个常用函数 Round(pi, 2) 四舍五入 FormatNumber(k,4) ' 把 k 格式化为带四位小数点的数. eg. 如果k =20000则显示为20,000.00:如果把formatnumber(k,0)则为20,000 Replace(expression,find,replacewith) '返回一字符串,其中指定的子串已被另一个子串替换 Left(String,Length) '返回指定数目的从字符串的左边算起的字符串.

ASP开发44条技巧集锦之二

技巧 上一节:ASP开发44条技巧集锦之一 21. 嵌入另一页   <iframe class="TBGen" style="top:2px" ID="UploadFiles" src="upload.asp" frameborder=0 scrolling=no width="250" height="25"></iframe> ----------------