正在阅读:微软建议的ASP性能优化28条守则微软建议的ASP性能优化28条守则

2005-05-31 15:20 出处: 作者:微软 责任编辑:xietaoming
 

技巧 10:使用显式选项

  在 .asp 文件中应使用 Option Explicit。此指令放在 .asp 文件的最上面,它强制开发人员声明要使用到的所有变量。许多程序员认为这种方法对于调试应用程序很有帮助,因为这种方法避免了键错变量名和误建新变量的可能性(例如,将 MyXMLString=) 错写成 MyXLMString=...。

  更重要的一点也许是,声明的变量比未声明的变量速度更快。由此,脚本在运行时每次用到未声明的变量时,按名称引用它。另一方面,声明的变量是有顺序的,要么以编译时间,要么以运行时间。以后,声明的变量都按此顺序引用。因为 Option Explicit 强制变量声明,它能确保声明所有变量,因此访问的速度也很快。

技巧 11:在子例程和函数中使用局部变量

  局部变量是那些在子例程和函数内声明的变量。在函数或子例程内,局部变量访问比全局变量访问更快。局部变量的使用也会使代码更清晰,因此应尽量使用局部变量。

技巧 12:将经常使用的数据复制到脚本变量中

  当访问 ASP 中的 COM 对象时,应将经常使用的对象数据复制到脚本变量中。这样做可减少 COM 方法调用,因为 COM 方法调用与访问脚本变量相比,开销相对较大。当访问 Collection 和 Dictionary 对象时,这种技术也会减少开销很大的查找。

  一般来说,如果您打算不止一次访问对象数据,那么就应将数据放到脚本变量中。这种优化的主要目标是 Request 变量(Form 和 QueryString 变量)。例如,您的站点可传递一个名为 UserID 的 QueryString 变量。假设此 UserID 在特定页面上被引用 12 次。可以无须调用 Request(?UserID?) 12 次,而是在 ASP 页面最上面将 UserID 指派到一个变量。然后在该页面自始至终使用该变量。这样就省去了 11 次 COM 方法调用。

  实际上,访问 COM 属性或方法的开销并没有那么大。下面举一个例子,说明某相当常见的代码(从语法上讲):

Foo.bar.blah.baz = Foo.bar.blah.qaz(1)
If Foo.bar.blah.zaq = Foo.bar.blah.abc Then ' ...

  当此代码运行时,下面是发生的情况:

  变量 Foo 被解析为全局对象。
  变量 bar 被解析为 Foo 的成员。这实际就是一次 COM 方法调用。
  变量 blah 被解析为 Foo.bar 的成员。这又是一次 COM 方法调用。
  变量 qaz 被解析为 foo.bar.blah 的成员。没有错,这还是一次 COM 方法调用。
  调用 Foo.bar.blah.quaz(1)。再一次 COM 方法调用。懂了吗?
  再次执行步骤 1 至步骤 3 以解析 baz。系统并不知道调用 qaz 是否改变对象模型,因此必须再次执行步骤 1 至 3 以解析 baz。
  将 baz 解析为 Foo.bar.blah 的成员。赋予属性。
  再次执行步骤 1 至步骤 3 以解析 zaq。
  再次执行步骤 1 至步骤 3 以解析 abc。
  正如您可看到的,效率相当差(且慢)。以 VBScript 写此代码的快速方法是:

Set myobj = Foo.bar.blah ' do the resolution of blah ONCE
Myobj.baz = myobj.qaz(1)
If Myobj.zaq = Myobj.abc Then '...

  如果您使用 VBScript 5.0 或更高版本,您可以使用 With 语句写此代码:

With Foo.bar.blah
.baz = .qaz(1)
If .zaq = .abc Then '...
...
End With


  注意此技巧也适用于 VB 程序设计。

技巧 13:避免重新确定数组的维数

  应尽量避免 Redim 数组。就性能而言,如果计算机的物理内存大小有限,最好将数组的初始维数设置为其最不利的情况 - 或将维数设置为其最佳的情况,然后再按需要重新确定维数。这并非意味着,如果知道您不需要内存时,就随便分配几兆字节的内存。

  下面的代码给您显示使用 Dim 和 Redim 不当的情形。

<%
Dim MyArray()
Redim MyArray(2)
MyArray(0) = ?hello?
MyArray(1) = ?good-bye?
MyArray(2) = ?farewell?
...
' some other code where you end up needing more space happens, then ...
Redim Preserve MyArray(5)
MyArray(3) = ?more stuff?
MyArray(4) = ?even more stuff?
MyArray(5) = ?yet more stuff?
%>


  最好一开始就将数组的初始大小 Dim 正确(在本例中,是 5)比 Redim 数组使其更大好得多。您可能浪费一些内存(如果您没有使用所有的元素),但获得的好处是速度变得更快。

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品