台灣最大程式設計社群網站
線上人數
999
 
會員總數:245961
討論主題:189545
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> 改善ASP效能的訣竅-12 (Nancy Cluts 著)
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
改善ASP效能的訣竅-12 (Nancy Cluts 著)
價值 : 0 QP  點閱數:2354 回應數:0
樓主

站務人員 站長
門外漢
0 1580
542 9
發送站內信

捐贈 VP 給 站務人員
訣竅 12:將經常使用的資料複製到指令碼變數中
當存取 ASP 中的 COM 物件時,應將經常使用的物件資料複製到指令碼變數中。這樣做就會減少 COM 方法呼叫,因為 COM 方法呼叫與存取指令碼變數相比,虛耗空間相對較大。當存取 Collection 和 Dictionary 物件時,這種技術也會減少很大的查尋。

一般來說,如果您打算存取物件資料一次以上,那麼就應將資料放到 script 變數中。這種最佳化的主要目標是 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 程式設計。

本篇文章發表於2000-09-09 00:00
目前尚無任何回覆
   

回覆
如要回應,請先登入.