指令碼
我們應該從正反兩方面考慮在工作中使用ASP指令碼組件的必要性。與編譯的組件比較,ASP指令碼組件有一個明顯的特點:WSC指令檔可在任何時候進行編輯,在下一次執行時,組件中的變化可自動反映出來。不需要重新編譯,不需重新啟動伺服器釋放現有組件的引用,也不需要重新註冊。並且,如果組件工作狀態良好,可選用合適的語言,用已證明可靠的代碼和/或演算法建立一個編譯版本,這同樣適用於任何可轉換組件。
ASP指令碼組件可適應COM +。事實上,與其他ASP內建對象一樣,這種組件可訪問ObjectContext對象。因此,如果需要,可在任何時候使用SetAbort和SetComplete。
指令碼組件可用標準的COM介面對現有的業務對象(組件)進行封裝,即使它們是用Perl編寫的也可以進行封裝。在封裝過程中,不必知道如何用Perl編寫,也不必瞭解相關知識。COM的語言中性特徵使得互通性更為容易。
代碼的組件化不僅改善了Web網站的效能,而且還可通過重新使用通用代碼塊協助設計和維護網站。
啟用WSC的頁面優於利用伺服器端包含(Server-Side Include,SSI)檔案的頁面。雖然它們做的事情相同,但ASP指令碼組件可根據運行期條件或輸入參數動態地建立所需要的對象。SSI不允許動態選擇,僅允許匯入名稱在頁面的原始碼中硬式編碼檔案。
當然,ASP指令碼組件也存在一些不足:
? 解釋組件不具備編譯組件的效能,因此ASP指令碼組件的效能不一定是最優的。但效能不是使用它們的理由。
? ASP指令碼組件不能訪問完整的Win32 API,完成一個系統級的任務需要特定的COMAutomation 物件。而且,指令碼語言與C++相比,甚至與VBA相比還不是一種非常成熟的語言。
16.6.1 選擇正確的工具
下面介紹建立ASP組件時選擇正確工具的快捷方法。
要開發關鍵的和真正需要伺服器效能最高的即時組件,應使用Visual C++。
因為伺服器端組件大多執行一些資料訪問類的任務,所以考慮使用C++和原始的OLE DB調用以獲得最大的效能。Visual C++、ALT模板和OLE DB介面的組合或許對效能的提高是最有效。本書的下一章將對用C++開發組件做更多的描述。
Visual Basic也是開發組件的強大工具。如果開發的組件不是關鍵性的,可以用Visual Basic。除了同樣具有編譯代碼、完全Win 32訪問和組件化外,Visual Basic比Visual C++容易。
WSC 可使頁面的原始程式碼群組件化,通過COM建立指令碼對象將增加一些額外工作量,但靈活性和可重用性較好,並且可減少維護工作量。
16.6.2 指令碼組件與VBScript類的比較
如果打算在ASP組件中使用VBScript 5.0,可以考慮使用VBScript類來替代指令碼組件。
建立VBScript類比建立Windows指令碼組件用的時間少一些,因為與CreateObject不同,New不需要通過COM引擎和註冊表對裝載的檔案定位。兩者編程能力幾乎相同,但使用WSC可利用不同指令碼語言的優點。
16.7 小結
本章分析了Windows指令碼組件(WSC)技術,ASP指令碼組件是它的特例。用指令碼語言編寫COM對象並不是難以實現的,事實上,這具有許多優點。但是本章內容並不是對每種情況都適合,所以不能解決實際碰到的所有問題。
本章內容重新歸納如下:
? WSC的結構和介面處理器的作用。
? 頁面指令碼代碼中ASP內建對象的映射。
? 客戶和ASP指令碼組件的互動。
? 用於ASP頁面的一個完整的WSC例子。
? ASP指令碼對象的優缺點。
下一章將介紹如何使用Visual C++編寫功能強大的組件。