IE8 鬆散耦合進程框架(Loosely-Coupled IE (LCIE)--特性介紹

官方介紹:http://blogs.msdn.com/b/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspxhtml

參考文檔:http://www.vista123.com/html/8972.html瀏覽器

IE8 鬆散耦合進程框架,英文原文是Loosely Coupled IE (LCIE),是一種基於做業(Job)的進程管理方式。這種方式已經逐漸被各大瀏覽器所採用,例如Google Chrome。框架

下圖是IE8的LCIE框架結構:性能

IE8 Process Model Diagram

 

做業是Windows 2000引入的一種進程管理方式,能夠用一個宿主進程管理多個子進程。管理進程能夠給子進程設置不少屬性,特別是一些和性能相關的屬性,具體能夠參考 SetInformationJobObject Function (Windows) 的API說明文檔。測試

當咱們安裝完IE8之後,打開一個Tab,使用 Process Explorer 會發現,有2個iexplore.exe實例,這個就是最典型的LCIE表現:Tab工做在進程空間裏面,有一個獨立的框架進程用於管理Tab進程。優化

以下圖所示,我打開了4個Tab,出現了3個Tab進程(爲何是3個呢,見下面解釋),框架進程的進程PID是12596:網站

 

因 爲LCIE的模型決定了IE的框架和Tab是獨立的進程體,所以相互之間是須要通訊的,根據Process Explorer的顯示,線程

框架進程和Tab進程的通訊是使用的ALPC(高級本地過程調用,在Windows內核裏面常常能夠見到,效率很高)機制(在 Windows Vista上面),orm

關於LPC的技術解釋,請Google搜索。htm

咱們繼續研究LCIE的 標籤建立方式。當咱們新開啓一個Tab之後,系統會建立一個iexplorer.exe進程用於和這個Tab綁定,那麼我開啓10個Tab之後,是10個 進程嗎?

實際的測試結果是:不必定。

具體建立多少個Tab進程實際是由IE框架肯定的,根據目前已知的結論,IE框架會根據可用的物理內存大小確認最多創 建幾個Tab進程。

注:默認狀況下,個人2檯筆記本(物理內存均配置了4GB,可用內存通常在1.5GB左右)在Windows Vista裏面,建立的Tab進程最可能是5個。

那麼,是否有可能控制Tab進程的數量呢?答案是能夠的。

 

IE8 Frame在啓動的時候,會檢查註冊表

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下面的TabProcGrowth鍵值(鍵值類型DWORD),利用這個鍵值,就能夠操做IE8的Tab數量了。

TabProcGrowth=0

IE框架和Tab工做在一個進程裏面,Tab採用線程的方式建立。 

當TabProcGrowth=0的時候,IE的保護模式(Protect Mode)會關閉,這種模式相似於在Windows Vista下面把 IE7 以 run as administrator方式啓動。

TabProcGrowth=1

IE框架和Tab工做在不一樣的進程裏面。 

可是Tab按照不一樣的mandatory integrity level (MIC)建立,舉例就是須要關閉保護模式的Tab工做在一個瀏覽進程裏面,另外的工做在另外的一個瀏覽進程裏面。 

例 如:我把taobao.com和kztechs.com加入了Trusted Site列表裏面,當使用這個模式的時候,訪問taobao.com和kztechs.com的時候,Tab將工做在一個進程裏面,而訪問其餘的站點的時 候,Tab將工做在另外的一個進程裏面。 

這是由於加入Trusted Site列表之後,IE的保護模式會關閉,MIC等級的不一樣形成了的不一樣的Tab進程的出現。

TabProcGrowth>1

在這個模式下,TabProcGrowth的值將決定最多建立的Tab進程數目。若是TabProcGrowth爲100,那麼最多建立100個Tab進程。

TabProcGrowth 不存在(默認狀況)

使用默認的機制,根據可用的物理內存數量決定Tab進程的數量。

 

關於IE8 LCIE的FAQ:

一、爲何不是每一個Tab一個進程,而有一個上限呢?

因 爲建立一個進程的開銷是遠遠大於建立一個線程的,建立一個進程,須要從新加載全部相關的模塊,並且進程間的切換也會帶來很大的性能損耗。

IE8的LCIE 機制在達到Tab進程最多數目之後,後續的新開網頁將將採用負載平衡的機制讓不一樣的Tab進程進行處理,以達到資源的最大利用。

 

二、LCIE模型裏面,會話是怎麼處理的?我怎麼感受到不一樣的Tab都使用的是同一個會話呢?

的確,所以Tab進程的出現,會話的處理是比較關注的一個點。

在IE8裏面,會話是和IE框架綁定的, 在這個IE框架下的全部Tab,共享同一個會話,具體來講就是:

假設第一個Tab進程訪問了msdn.microsoft.com網站並屬於了Live ID登陸之後,後續新開的Tab進程若是也訪問了msdn.microsoft.com網站,那麼是共享剛纔的Live ID的,除非過時

;並且,即便你從開始菜單裏面點擊IE圖標,新建立的窗口也是使用先前的會話的。

 

三、在LCIE模型裏面,若是讓不一樣的窗口使用不一樣的會話呢?

要在IE8裏面,讓不一樣的窗口使用不一樣的會話,能夠點擊文件菜單-->新建會話菜單項,使用這個方式,新建立的窗口將採用一個新的會話,以便和以前的會話區分開來。

 

四、爲何有時候IE8 Tab進程在訪問的頁面關閉之後,Tab進程仍是存在呢?

這 是爲了性能考慮的,防止用戶立刻又新開一個窗口,前面說過建立一個Tab進程是須要不少資源的。

在默認狀況下,IE8的Tab進程在網頁窗口關閉之後,將 駐留60秒時間,而後再退出。

固然,咱們也能夠經過設置註冊表 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下的TabShutdownDelay DWORD鍵值來控制Tab進程的退出時間。注意:TabShutdownDelay的單位是毫秒(1秒等於1000毫秒)。

 

文末:

IE8 相對於IE7來講,不管是進程框架和渲染引擎都獲得了極大的改善和優化,並且在各類標準支持方面都比IE7好了很多。

相關文章
相關標籤/搜索