ASP性能优化28条守则---[12] 将经常使用的数据复制到脚本变量中


技巧 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 程序设计。

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3