1.1.4 松耦合Internet Explorer
松耦合Internet Explorer(LCIE)是在IE 8中引入的,它利用進程分離來提高瀏覽器的可靠性和性能。就像為保護模式所做的修改一樣,松耦合IE重新組織和定義了組件及其通信模型。圖1-3中給出了這一模型。
圖1-3 松耦合IE體系結(jié)構(gòu)框圖
松耦合IE對瀏覽器的體系結(jié)構(gòu)進行了重新設(shè)計,使得框架選項卡運行在分離進程中,而不是同一進程的分離線程中??蚣苓M程是在中完整性級別運行的,它代替了IE 7的ieuser.exe,作為通用代理對象。這個代理對象使用異步通信模型來處理完整性和提升要求。在IE 8之前,當禁用松耦合IE時,瀏覽器框架、選項卡和擴展都是作為共用瀏覽器進程的分離線程來運行的。
1. 共享用戶界面和虛擬選項卡
盡管選項卡進程和它們的組件與框架進程是隔離的,但它們?nèi)匀伙@示在框架的用戶界面上下文中。IE框架進程將所有以中、低完整性級別運行的選項卡進程都放在IE框架用戶界面中,位于正確的選項卡位置。IE還確保了工具欄、瀏覽器欄和所有其他擴展性點都正確疊放在框架上——即使這些擴展是在選項卡進程中運行也是如此。
虛擬選項卡是一項松耦合IE子功能,可以僅利用一個進程來虛擬托管處于不同完整性級別的不同選項卡進程。在導(dǎo)航期間,代理進程決定一個新頁面是否應(yīng)以保護模式加載。必要時,該代理將產(chǎn)生一個處于新完整性級別的進程,并將此進程的用戶界面與框架集成在一起。這樣就可以在同一個框架用戶界面中托管低、中完整性級別的進程。
注意:
在IE 7中,如果要在不同完整性級別的區(qū)域之間進行導(dǎo)航(例如從Internet到intranet),IE會產(chǎn)一個新的框架窗口來加載該頁面。這是必要的,因為在IE 7中,框架和選項卡是運行在同一進程中的,而一個進程只能運行在一種完整性級別。
2. 故障修復(fù)
進程分離不僅使瀏覽器能夠監(jiān)視和控制選項卡可以做些什么,還能對這些選項卡產(chǎn)生的問題和故障做出反應(yīng)。在IE 8之前版本的IE中,任何異常(例如,被零除、訪問沖突或堆棧溢出)都可能會使整個瀏覽器崩潰,包括框架、所有選項卡和所有擴展。到了IE 8,瀏覽器框架監(jiān)視選項卡故障,如果其中一個發(fā)生故障,則嘗試創(chuàng)建一個新的選項卡進程,并將狀態(tài)恢復(fù)到該進程中。如果故障修復(fù)失敗,用戶會得到通知。
1.2 瀏覽器框架、選項卡和用戶界面
IE的用戶界面已經(jīng)體現(xiàn)了相當多的功能,更不要說用戶最終要面對的就是瀏覽器的用戶界面了。下面幾節(jié)將詳細介紹IE框架的用戶界面體系結(jié)構(gòu),以及從平臺角度可以擴展的領(lǐng)域。
這一節(jié)介紹的大多數(shù)功能,在IE的可托管版本(WebBrowser控件和MSHTML)都是不可用的。出于簡潔性考慮,我將在本章“托管與重復(fù)使用”一節(jié)對IE正常版和托管版本都能使用的功能進行注釋。