不過,隨着Web瀏覽器重要性的日益突出,惡意軟件、木馬、間諜軟件等網絡攻擊也呈現逐漸的上升。而面對如此衆多的潛在威脅,爲了確保用戶的安全性和穩定性,瀏覽器不得不改進瀏覽器的性能,其中之一就是向用戶提供多進程瀏覽。
在瀏覽器中添加多進程瀏覽功能以後,即便是瀏覽器其中的一個進程出現了崩潰現象,其餘的進程也不會受到影響。例如,若是一個網站中有漏洞或包含惡意代碼,它就有可能摧毀當前運行在這個網站上的標籤,可是它卻不會影響其餘的進程或整個瀏覽器。
目前,有不少的瀏覽器廠商採用了多進程標籤瀏覽的概念,其中包括谷歌Chrome、微軟IE8和Mozilla Firefox,而衆多基於WebKit的瀏覽器也將在不久以後採用多進程標籤瀏覽這個功能,例如蘋果的Safari瀏覽器。
不過,雖然上述瀏覽器都採用多進程標籤瀏覽概念,可是他們在瀏覽器中執行多進程標籤瀏覽的方法倒是不一樣的。
#一、谷歌Chrome/Chromium的多進程架構
谷歌Chrome是首款採用多進程瀏覽概念的瀏覽器,它還具有最爲複雜的用於隔離瀏覽器各個組成部分的系統。
在Chrome中,谷歌經過out of process plugins(OOPP)功能將全部的插件進程(如Flash、Java、PDF閱讀器等)與的瀏覽器進程隔離,進而提高Chrome瀏覽器的安全性。 也就是說,即便是Chrome中有插件出現崩潰現象,也並不會影響整個瀏覽器的運行
總得來說,谷歌Chrome和Chromium中包含如下4中主要的進程類型:
*瀏覽器進程——用於處理用戶界面和管理全部其餘的進程,其運行在瀏覽器的最頂級;
*渲染進程——用於處理獨立瀏覽器標籤中的渲染,值得注意的是,一個渲染進程可以處理多個標籤;
*插件進程——每一個瀏覽器插件如Adobe Flash或Java都運行在它們本身的獨立進程中,這些插件進程可以與各自的渲染進程互通;
*擴展進程——瀏覽器中的擴展也擁有各自的獨立進程,以免互相干擾。
圖1:谷歌Chrome多進程架構
#二、微軟IE8 Loosely-Coupled IE(LCIE)
在最新一代瀏覽器IE8中,微軟添加了被稱爲「Loosely-Coupled IE(LCIE)」的架構。
經過Loosely-Coupled IE(LCIE)架構,IE8將主要的瀏覽進程與渲染進程相隔離。
主要的進程處理瀏覽器、用戶界面和框架(窗口),用於存儲選項卡。在IE8中,多個選項卡是運行在相同的進程中的,不過不一樣安全級別的選項卡是相互分開的。ActiveX空間是經過選項卡進程進行處理的。
圖2:微軟IE8多進程架構
圖(3)
#三、Mozilla Electrolysis和Out-of-process插件
相較於谷歌Chrome和微軟IE8,Mozilla Firefox是步入多進程行列中較晚的一款瀏覽器,其中所包含的多進程架構也不如Chrome或IE複雜。
Mozilla基金會在Firefox中添加多進程架構的目的就是隔離瀏覽器插件和瀏覽器的主要進程,項目代號爲「Electrolysis」,正處於早期的測試階段。
目前,Firefox 3.6.4 beta builds中已經包含了多進程處理能力。
圖4:Firefox中的多進程架構
#四、WebKit 2中的多進程
前段時間,WebKit團隊宣佈,在即將發佈的WebKit2中將會包含多進程瀏覽能力。換句話也就是說,採用WebKit Web渲染引擎的大量瀏覽器中都將會引進多進程瀏覽功能。
雖然谷歌Chrome/Chromium使用的是WebKit引擎,不過他們的多進程架構是不一樣的。在Chrome中,谷歌在每一個渲染進程中都包含一個WebKit渲染引擎,而WebKit 小組則計劃將WebKit2渲染引擎自身分裂到多個進程中。
雖然谷歌Chrome/Chromium使用的是WebKit引擎,不過他們的多進程架構是不一樣的。在Chrome中,谷歌在每一個渲染進程中都包含一個WebKit渲染引擎,而WebKit 小組則計劃將WebKit2渲染引擎自身分裂到多個進程中。
在WebKit2採用多進程瀏覽模型以後,網頁的內容(JavaScript,HTML,以及佈局等)將各自擁有獨立的進程,這一機制是經過兩個主要的子系統(CoreIPC和DrawingArea)來支持的。
WebKit2中的多進程瀏覽模型和Google Chrome的最大不一樣在於,WebKit直接把獨立進程模型放進了一個框架中,所以也能被其餘客戶端使用。事實上,歷史上除了瀏覽器以外,蘋果的郵件客戶端和微軟的我的信息管理軟件都使用過WebKit內核。
WebKit仍是其它幾個移動瀏覽器的基礎,包括iPhone操做系統、谷歌的 Android、Symbian手機使用的S60 Web瀏覽器和Palm Pre。
圖1:WebKit中的多進程架構