![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 站務人員 站長 ![]()
![]() ![]() ![]() |
當存取 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
|