*技巧5:儘可能的使用本地(局部)變數
(以下的新技巧將取代較早前發布的“在一行內定義變數”,其中包含有一些錯誤觀點):
局部變數是在子程式和函數中定義的(也就是常說局部範圍的變數),這些變數被編譯成數字指向並放入一張表中。這些局部變數的指向可以通過一次編譯完成。而全域變數則是在運行時被執行的。這就意味著局部變數的存取要比全域變數快好幾倍。而且,多維全域變數是其中最慢的,當第一次使用一個多維全域變數時,在新的對象產生之前,就要在整個物件模型中搜尋一遍同名的對象。
以下是一個非常常見的例子:
Foo.bar.blah.baz = Foo.bar.blah.qaz(1)
If Foo.bar.blah.zaq = Foo.bar.blah.abc then
運行時產生如下結果:
1)變數Foo被定義為一個全域變數
2)變數bar被定義為Foo的一個成員
3)變數blah被定義為Foo.bar的一個成員
4)變數qaz被定義為Foo.bar.blah的一個成員
5)調用 Foo.bar.blah.quaz(1)
6)重複1至3。系統並不知道如果調用qaz改變了物件模型1-3步必須重新執行
7)定義baz為 Foo.bar.blah的成員,輸出值
8)重複1-3,執行zaq
9)重複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
*技巧6:避免重複定義數組
當我們在使用dim時,避免重新定義數組。因為你可能要用redim去重新定義數組的大小。至於要做這樣的操作的話,如果你的機器記憶體不是很大,那麼最好在一開始就考慮到最壞的打算去設定數組的長度或者設定最佳狀態時的長度,在非常必要時才使用redim。當然這樣並不意味著要去增加記憶體,如果你不是很需要的話。
以下舉例說明不恰當的使用redim
<%
dim MyArray()
Redim MyArrray(2)
MyArray(0) = "hello"
MyArray(1) = "good-bye"
.
.
.
some other code where you end up needing
more space happens then ...
Redim Preserve MyArray(5)
MyArray(2) = "more stuff"
MyArray(3) = "even more stuff"
MyArray(4) = "yet more stuff"
%>
其實在開始就定義myarray(5),而以後需要的話再用redim去增加他的大小,這樣的話可能會佔用一些記憶體,但速度就要快得多了。