ASP技巧集錦(官方權威版)-4

來源:互聯網
上載者:User
技巧    技巧 9:進程外的執行將犧牲可靠性
  ASP 和 MTS/COM+ 都有允許您以可靠性換取效能的配置選項。當建立和部署應用程式時,應當理解這種交換。
  ASP 選項
  ASP 應用程式可以配置為以三種方式之一運行。在 IIS 5.0 中引入了術語“隔離級”來描述這些選項。三個隔離級值分別是低、中和高:
  低級隔離。該隔離級在所有版本的 IIS 中受到支援,並且是最快的。它在主 IIS 進程 Inetinfo.exe 中執行 ASP。如果 ASP 應用程式崩潰,則 IIS 也將崩潰。(要在 IIS 4.0 下重新啟動 IIS,Web 網站管理員需要使用工具,如 InetMon,來監視網站,如果伺服器失敗,將運行批次檔來重新啟動伺服器。而 IIS 5.0 則引入了可靠的重新啟動,它將自動重新啟動失敗的伺服器。)
  中級隔離。IIS 5.0 引入了這個新隔離級,它稱為進程外的,這是因為 ASP 運行在 IIS 進程之外。在中級隔離中,所有被配置按“中級”啟動並執行 ASP 應用程式,將共用單個進程空間。這將減少在一個伺服器上運行多個進程外的 ASP 應用程式所需的進程數。中級是 IIS 5.0 中預設的隔離級。
  進階隔離。在 IIS 4.0 和 IIS 5.0 中受到支援,進階隔離也是進程外的。如果 ASP 崩潰,則 Web 服務器並不崩潰。ASP 應用程式將在下一個 ASP 請求時自動重新啟動。使用進階隔離,每個被配置為按進階啟動並執行 ASP 應用程式,將在其自己的進程空間中運行。這樣可以保護 ASP 應用程式彼此不受幹擾。它的缺點是它需要為每個 ASP 應用程式建立獨立的進程。當需要在一個伺服器上主持十多個應用程式時,會增加很多開銷。
  那麼,哪個選項是最好的呢?在 IIS 4.0 中,運行進程外的應用程式會極大地影響效能。在 IIS 5.0 中,做了許多工作,使得進程外運行 ASP 應用程式對效能產生的影響降到了最低。實際上,在大多數測試中,在 IIS 5.0 中的 ASP 進程外應用程式,要比 IIS 4.0 中的進程內應用程式運行得更快。無論如何,進程內(低隔離級)在兩種平台上仍然產生了最好的效能。但是,如果您的命中率相對較低或最大輸送量較低,選擇低隔離級不會有太大的好處。所以,除非您需要每個 Web 服務器每秒處理數百或數千個頁面,否則沒有必要選擇低隔離級。同樣,應當測試多種配置並判斷哪種情形最適合您。
  注意: 當您進程外運行 ASP 應用程式(中級或進階隔離)時,則在 NT4 上它們將運行在 MTS 中,而在 Windows 2000 上它們將運行在 COM+ 中。即,在 NT4 上它們運行在 Mtx.exe 中,而在 Windows 2000 上它們運行在 DllHost.exe 中。在“工作管理員”中,您可以看見這些正在啟動並執行進程。還可以看見 IIS 如何為進程外的 ASP 應用程式配置 MTS 程式包或 COM+ 應用程式。
  COM 選項
  COM 組件也有三個配置選項,雖然與 ASP 選項不完全相似。COM 組件可以被:“不配置”、配置為“庫應用程式”或配置為“伺服器應用程式”。“不配置”是指不向 COM+ 註冊組件。組件將運行在調用者的進程空間,就是說,它們是“進程中”的。“庫應用程式”也是進程中的,但受惠於 COM+ 的服務,包括安全性、事務和環境支援。“伺服器應用程式”被配置為在其自己的進程空間中運行。
  您可能看到,不配置的組件比庫應用程式優點稍微多些。您還可能看到“庫應用程式”比“伺服器應用程式”有很大的效能優點。這是因為“庫應用程式”與 ASP 運行在同一個進程中,而“伺服器應用程式”則運行在自己的進程中。內部進程調用的開銷要比進程內調用的開銷大得多。而且,當在進程之間傳遞資料(如記錄集)時,必須在兩個進程之間複製所有的資料。
  缺點!當使用“COM 伺服器應用程式”時,如果要在 ASP 和 COM 之間傳遞對象,請確保對象實現“按值彙集”,即 MBV。實現 MBV 的對象將其自身從一個進程複製到另一個進程。這比另一種方式好,在另一種方式中,對象留在建立它的進程中,而其他進程則重複調用建立使用該對象的進程。被中斷連線的 ADO 記錄集將是按值彙集的,已串連的記錄集則不是。Scripting.Dictionary 並不實現 MBV,不會在進程之間傳遞。最後,要另外告訴 VB 程式員的是:MBV 不是通過傳遞參數ByVal 獲得的。MBV 是由原始組件創作者實現的。
  怎麼辦?
  如果您想要以效能與可靠性的合理交換來完成您的配置,我們的推薦如下:
  在 IIS 4.0 上,使用 ASP 的低隔離等級,並使用“MTS 伺服器包”。
  在 IIS 5.0 上,使用 ASP 的中隔離等級,並使用“COM+ 庫應用程式”。
  這些是很一般的準則;通常讓公司以中或高隔離等級運行 ASP,而單一目的的 Web 服務器可運行於低隔離等級。請權衡折中並自行決定滿足需求的配置。
  
   技巧 10:顯式使用選項
  在 .asp 檔案中顯式使用選項 Explicit。置於 .asp 檔案開頭的這一指令,強制開發人員聲明所有要使用的變數。許多開發人員認為這有助於調試應用程式,因為它避免了錯誤鍵入變數名稱而不經意地建立變數(例如,MyXLMString=... 而非 MyXMLString=)。
  也許更重要的是,聲明的變數比未聲明的變數快。實際上,指令碼運行時,在每次使用未聲明變數時按照名稱引用。而聲明的變數,在編譯或運行時分配了序號。這樣,聲明的變數按照該序號引用。由於選項 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 編程同樣有效。

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。