什么才是提高ASP性能的最佳选择(一)

性能

  ASP开发人员为了在他们的设计项目中获得更好的性能和可扩展性而不断努力。幸运地是,有许多书籍和站点在这方面提供了很好的建议。但是这些建议的基础都是从ASP平台工作的结构上所得出的结论,对实际获得的性能的提高没有量的测量。由于这些建议需要更加复杂的编码过程并降低了编码的可读性,开发人员就只能在看不到实际运行效果的情况下,独自衡量为了提高他们ASP应用程序的性能是否值得付出这些代价。

  本文分为两大部分,我将介绍一些性能测试结果,帮助开发人员来确定某一特定举措是否不仅对将来的项目来说是值得的,并且能够对原来的项目进行更新。在第一部分我将回顾一些ASP开发的基础性问题。在第二部分,将涉及一些最优化ADO函数,并将它们的结果与调用VB COM对象执行相同ADO函数的ASP页面进行比较。这些结果很让人开眼界,甚至有些时候是很令人吃惊的。

  在本文中,我们将回答以下问题:

  * 将ASP生成的内容写入响应流中最有效的方法是什么?
  * 是否应该开启缓冲器?
  * 是否应该考虑向ASP代码中增加注释?
  * 是否应该为页面明确地设置默认语言?
  * 如果不需要,是否应该关闭Session 状态?
  * 是否应该把脚本逻辑放在子程序和函数区中?
  * 使用包含文件有什么影响?
  * 执行错误处理时会施加什么样的负载?
  * 设置一个上下文处理是否对性能有影响?

所有测试都是用Microsoft的Web应用程序重点工具(WAST)来进行的,这是一个免费的工具,可以在这里(http://webtool.rte.microsoft.com/)找到。我用WAST创建了一个简单的test 脚本,反复调用下面所描述的ASP页面测试(每个超过70,000次)。反应的时间基于平均最后字节总时间(TTLB), 也就是从最初请求的时间到工具从服务器接收最后一位数据的时间。我们的测试服务器是一个Pentium 166,内存为196MB,客户机为Pentium 450,内存为256MB。你也许会想这些机器的性能并不算很高级,但是不要忘了,我们并不是要测试服务器的容量,我们只是要测试服务器每次处理一个页面所用的时间。测试期间这些机器不做其它工作。WAST 测试脚本、测试报告以及所有的ASP测试页面都包含在ZIP文件(http://www.asptoday.com/articles/images/20000113.zip)中,你可以自己进行回顾和测试。

将ASP生成的内容写入响应流中最有效的方法是什么?

  使用ASP的一个最主要原因是在服务器上生成动态内容。所以很明显,我们测试的起点是确定将动态内容发送到响应流中的最适合的方式。在多种选择中,有两个是最基本的:一是使用内联ASP标记,另一个是使用Response.Write 语句。

  为测试这些选择,我们创建了一个简单的ASP页面,其中定义了一些变量,然后将它们的值插入表格中。虽然这个页面很简单也不是很实用,但它允许我们分离并测试一些单独的问题。

  使用ASP内联标记

  第一个测试包括使用内联ASP标记< %= x % >,其中x是一个已赋值的变量。到目前为止,这个方法是最容易执行的,并且它使页面的HTML部分保持一种易于阅读和维护的格式。

  < % OPTION EXPLICIT
  Dim FirstName
  Dim LastName
  Dim MiddleInitial
  Dim Address
  Dim City
  Dim State
  Dim PhoneNumber
  Dim FaxNumber
  Dim EMail
  Dim BirthDate
  FirstName = "John"
  MiddleInitial = "Q"
  LastName = "Public"
  Address = "100 Main Street"
  City = "New York"
  State = "NY"
  PhoneNumber = "1-212-555-1234"
  FaxNumber = "1-212-555-1234"
  EMail = "john@public.com"
  BirthDate = "1/1/1950"
  % >

  < HTML >
  < HEAD >
  < TITLE >Response Test< / TITLE >
  < /HEAD >
  < BODY >
  < H1 >Response Test< /H1 >
  < TABLE >
  < tr >< td >< b >First Name:< /b >< /td >< td >< %= FirstName % >< /td >< /tr >
  < tr >< td >< b >Middle Initial:< /b >< /td >< td >< %= MiddleInitial % >< /td >< /tr >
  < tr >< td >< b >Last Name:< /b >< /td >< td >< %= LastName % >< /td >< /tr >
  < tr >< td >< b >Address:< /b >< /td >< td >< %= Address % >< /td >< /tr >
  < tr >< td >< b >City:< /b >< /td >< td >< %= City % >< /td >< /tr >
  < tr >< td >< b >State:< /b >< /td >< td >< %= State % >< /td >< /tr >
  < tr >< td >< b >Phone Number:< /b >< /td >< td >< %= PhoneNumber % >< /td >< /tr >
  < tr >< td >< b >Fax Number:< /b >< /td >< td >< %= FaxNumber % >< /td >< /tr >
  < tr >< td >< b >EMail:< /b >< /td >< td >< %= EMail % >< /td >< /tr >
  < tr >< td >< b >Birth Date:< /b >< /td >< td >< %= BirthDate % >< /td >< /tr >
  < /TABLE >
  < /BODY >
  < /HTML >

  /app1/response1.asp的完整代码

  以前的最佳(反应速度) = 8.28 msec/page

  在HTML的每一行使用Response.Write 语句

  许多比较好的学习文档建议避免使用前面的那种方法。其主要理由是,在输出页面和处理页面施加反应时间的过程中,如果web 服务器不得不在发送纯HTML和处理脚本之间进行转换,就会发生一种被称为上下文转换的问题。大部分程序员一听到这里,他们的第一反应就是将原始的HTML的每一行都包装在Response.Write函数中。

  …
  Response.Write("< html >")
  Response.Write("< head >")
  Response.Write(" < title >Response Test< /title >")
  Response.Write("< /head >")
  Response.Write("< body >")
  Response.Write("< h1 >Response Test< /h1 >")
  Response.Write("< table >")
  Response.Write("< tr >< td >< b >First Name:< /b >< /td >< td >" & FirstName & "< /td >< /
tr >"

时间: 2024-08-30 06:30:03

什么才是提高ASP性能的最佳选择(一)的相关文章

什么才是提高ASP性能的最佳选择(二)

性能 是否应该开启缓冲器? 通过脚本程序启动缓冲器 在ASP脚本的顶部包含Response.Buffer=True ,IIS就会将页面的内容缓存. < % OPTION EXPLICIT Response.Buffer = true Dim FirstName - /app1/buffer__1.asp的片段 以前的最佳(反应时间)= 7.05 msec/page 反应时间 = 6.08 msec/page 差= -0.97 msec (降低13.7%) 性能得到了极大提高.但是等等,还能有更好

什么才是提高ASP性能的最佳选择

性能 ASP开发人员为了在他们的设计项目中获得更好的性能和可扩展性而不断努力.幸运地是,有许多书籍和站点在这方面提供了很好的建议.但是这些建议的基础都是从ASP平台工作的结构上所得出的结论,对实际获得的性能的提高没有量的测量.由于这些建议需要更加复杂的编码过程并降低了编码的可读性,开发人员就只能在看不到实际运行效果的情况下,独自衡量为了提高他们ASP应用程序的性能是否值得付出这些代价. 本文分为两大部分,我将介绍一些性能测试结果,帮助开发人员来确定某一特定举措是否不仅对将来的项目来说是值得的,并

什么才是提高ASP性能的最佳选择(三)

性能 结论 本文第一部分的重要之处在于许多小事情的累积.为了强调这个问题,我设置了最后一个测试,在其中进行了我们以前曾经测试过的看来无所谓但实际上有坏影响的所有操作.我包含了许多Response.Write 声明.关闭了缓冲器.设置了默认语言.去掉了Option Explicit 引用并初始化了错误句柄. < %@ LANGUAGE=VBSCRIPT % > < % On Error Resume Next FirstName = "John" - BirthDate

什么才是提高ASP性能的最佳选择(续)

性能 在本文的第一部分中,我回顾了有关ASP开发的一些基本问题,介绍了一些性能测试的结果,以理解我们放置在页面中的代码可能对运行性能造成什么样的影响.在这个系列的第二部分,我们将探讨经过论证的ASP最广泛的用途,即通过ActiveX 数据对象(ADO)交互使用数据库内容.ADO是Microsoft通用并简单的数据库界面. ADO有很多的功能设置,因此准备这篇文章时最大的挑战便是限制测试问题的范围.考虑到读取大数据集会为web 服务器施加很大的负载,我决定将研究的内容局限在为使用ADO记录集寻找最

什么才是提高ASP性能的最佳选择(续四)

性能 规则的总结 现在我们来重新总结一下这些规则: * 避免包含ADOVBS.inc文件,用其它方法来使用常量. * 当使用一个单个记录集时,将连接字符串传递到ActiveConnection属性中. * 在一个页面上使用多个记录集时,创建一个Connection 对象,在ActiveConnection 属性中重复使用它. * 使用最适合你的任务的最简单的指针和锁的类型. * 通过ADODB.Recordset 类例示记录集以获得最好的性能和最大的灵活性. * 除非是一个断开的环境中所要求的,

什么才是提高ASP性能的最佳选择(续一)

性能 在本文的第一部分中,我回顾了有关ASP开发的一些基本问题,介绍了一些性能测试的结果,以理解我们放置在页面中的代码可能对运行性能造成什么样的影响.在这个系列的第二部分,我们将探讨经过论证的ASP最广泛的用途,即通过ActiveX 数据对象(ADO)交互使用数据库内容.ADO是Microsoft通用并简单的数据库界面. ADO有很多的功能设置,因此准备这篇文章时最大的挑战便是限制测试问题的范围.考虑到读取大数据集会为web 服务器施加很大的负载,我决定将研究的内容局限在为使用ADO记录集寻找最

什么才是提高ASP性能的最佳选择(续二)

性能 当使用一个记录集时,是否应该创建一个单独的Connection对象? 要想正确回答这个问题,需要在两个不同情况下检验测试结果:第一是每页执行一个数据库处理的情况,第二是每页执行多个数据库处理的情况. 在前面的例子中,我们已经创建了一个单独的Connection对象,并将它传递到记录集的ActiveConnection 属性.但是也有可能仅仅把连接字符串传递到这个属性中,从而可以避免一个额外的步骤,即在脚本( ADO__03.asp )中例示和配置一个单独的组件: objRS.ActiveC

什么才是提高ASP性能的最佳选择(续三)

性能 引用记录集中域值的最有效方法是什么? 到目前为止,我都是用名字引用记录集中的域值的.这可能是一种效率很低的方法,因为每次调用都需要查找域.为了证明这一点,下面的测试就要通过记录集中域的集合的指针来引用域(ADO__08.asp): 'write data Do While Not objRS.EOF Response.Write( _ "< TR >" & _ "< TD >" & objRS(0) & &quo

提高ASP性能的最佳选择2

性能 是否应该开启缓冲器? 通过脚本程序启动缓冲器 在ASP脚本的顶部包含Response.Buffer=True ,IIS就会将页面的内容缓存. < % OPTION EXPLICIT Response.Buffer = true Dim FirstName - /app1/buffer__1.asp的片段 以前的最佳(反应时间)= 7.05 msec/page 反应时间 = 6.08 msec/page 差= -0.97 msec (降低13.7%) 性能得到了极大提高.但是等等,还能有更好