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


选项 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 ‘' 对 blah 做一次解析
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
数组。从关心性能的角度来说,如果计算机受物理内存的限制,最好一开始将数组的维数设置为最差方案 - 而不要将维数设置为最佳方案,再根据需要重新定义维数。这并不意味着明知道不需要那么多而就是应该分配太多的内存。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3230.html