技術(shù)分析 - 再談Internet Explorer 8進程模型
今天在網(wǎng)上看到了微軟公布了一個IE8和其他2款瀏覽器:Firefox和Google Chrome的速度對比的白皮書和視頻,感嘆于IE8的高效和穩(wěn)定。
首先我們看一下IE 7的進程模型
(圖片引自于IE8 Team Blog)
在Vista的IE7當中(注:不能是XP),由2個進程掌管,一個是ieuser.exe,另外一個是iexplore.exe,其中ieuser.exe運行在medium的完整性級別,起著決定iexplorer.exe這個進程的完整性級別。
這里可以做個實驗:在IE7里面打開2個空的Tab,然后分別在2個Tab上打開www.baidu.com和www.taobao.com,由于淘寶網(wǎng)需要運行在保護模式關(guān)閉的IE7進程下,因此此時會彈出一個新的IE頁面來顯示淘寶網(wǎng)的內(nèi)容。
注意此時有2個IE的頁面,從上面的圖中就可以知道為什么了。因為在IE7當中,一個IE頁面對應(yīng)著一個iexplorer.exe的進程,而一個 iexplorer.exe進程中的所有Tab都必須是相同的完整性級別。如果不同完整性級別的Tab出現(xiàn),那么需要新開IE頁面。
這個時候,用Process Explorer來分析一下2個進程:
再來看一下IE8的進程模型:
(圖片引自于IE8 Team Blog)
在IE8里面的進程模型有了很大的變化,Smallfrogs的文章里面也介紹了很多,關(guān)鍵就在于IE8里面每個Tab都有一個iexplorer.exe的進程。
同樣剛剛的實驗放在IE8里面,就會發(fā)現(xiàn),在一個IE8的頁面里面可以同時運行百度和淘寶的Tab。
這是因為在IE8里面,取消了ieuser.exe這個進程,我猜測這也是IE8的運行速度加快很多的主要原因。其次就是一個Tab一個進程,使得在IE8下面的所有Tab都可以被裝入一個IE頁面,而不要再像IE7那樣,同樣完整性級別的Tab共享一個 iexplorer.exe進程。這樣,我們平時瀏覽不同完整性級別的網(wǎng)頁的時候,就不需要切換IE的窗口,而只需要切換Tab就可以了。
這個時候,同樣用Process Explorer來分析一下2個進程:
說了這么多,當然要說一下之所以IE8的進程模型要如此Design的原因,原因在smallfrogs的文章當中早有提出,這里引用一下:
“這種設(shè)計的好處就是一個Tab崩潰以后,只會影響這個Tab,對于其他的Tab是不影響的。同時,最外面的框架進程能夠知道子Tab的情況,也就能夠很好的實現(xiàn)“災(zāi)難恢復”了。”
【編輯推薦】