手動(dòng)打開(kāi)的兩個(gè)瀏覽器進(jìn)程,訪問(wèn)同一個(gè)頁(yè)面,發(fā)送/接收到的cookie是同一個(gè)值。這是瀏覽器本身所設(shè)計(jì)的,無(wú)法通過(guò)程序來(lái)更改。但是在客戶端可以通過(guò)以幾種方式設(shè)置后,讓不同的瀏覽器使用不同的會(huì)話:
1、 打開(kāi)瀏覽器后,選擇文件菜單下的新建會(huì)話選項(xiàng)來(lái)打開(kāi)一個(gè)新的瀏覽器窗口。
2、 對(duì)iexplore.exe添加一個(gè)快捷方式,在快捷方式后邊添加上啟動(dòng)參數(shù)-nomerge,以后使用該快捷方式啟動(dòng)瀏覽器:
3、 修改注冊(cè)表,在注冊(cè)表項(xiàng)HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下新加一個(gè)dword值TabProcGrowth=0,讓它 Loosely Couple
附:Windows 7 研究——IE8 松散耦合進(jìn)程框架探索(轉(zhuǎn)自:http://www.vista123.com/html/8972.html)
在2008年8月份IE8 Beta剛剛面世不久的時(shí)候,我曾經(jīng)用極短的篇幅介紹了一下IE8的新的Tab控制模型(詳情見(jiàn):《IE8 新特性分析:IE8的穩(wěn)定性源自何處》 一文)。今天,我將繼續(xù)和大家分享一些最近一段時(shí)間獲得的新的知識(shí)。
IE8 松散耦合進(jìn)程框架,英文原文是Loosely Coupled IE (LCIE),是一種基于作業(yè)(Job)的進(jìn)程管理方式。這種方式已經(jīng)逐漸被各大瀏覽器所采用,例如Google Chrome。
下圖是IE8的LCIE框架結(jié)構(gòu):
作業(yè)是Windows 2000引入的一種進(jìn)程管理方式,可以用一個(gè)宿主進(jìn)程管理多個(gè)子進(jìn)程。管理進(jìn)程可以給子進(jìn)程設(shè)置很多屬性,特別是一些和性能相關(guān)的屬性,具體可以參考SetInformationJobObject Function (Windows) 的API說(shuō)明文檔。
當(dāng)我們安裝完IE8以后,打開(kāi)一個(gè)Tab,使用 Process Explorer 會(huì)發(fā)現(xiàn),有2個(gè)iexplore.exe實(shí)例,這個(gè)就是最典型的LCIE表現(xiàn):Tab工作在進(jìn)程空間里面,有一個(gè)獨(dú)立的框架進(jìn)程用于管理Tab進(jìn)程。
如下圖所示,我打開(kāi)了4個(gè)Tab,出現(xiàn)了4個(gè)Tab進(jìn)程(進(jìn)程ID分別為 9000、9672、6052、3056),框架進(jìn)程的進(jìn)程PID是7416:
因 為L(zhǎng)CIE的模型決定了IE的框架和Tab是獨(dú)立的進(jìn)程體,因此相互之間是需要通信的,根據(jù)Process Explorer的顯示,框架進(jìn)程和Tab進(jìn)程的通信是使用的ALPC(高級(jí)本地過(guò)程調(diào)用,在Windows內(nèi)核里面經(jīng)??梢砸?jiàn)到,效率很高)機(jī)制(在 Windows Vista上面),關(guān)于LPC的技術(shù)解釋?zhuān)?qǐng)Google搜索。
我們繼續(xù)研究LCIE的 標(biāo)簽創(chuàng)建方式。當(dāng)我們新開(kāi)啟一個(gè)Tab以后,系統(tǒng)會(huì)創(chuàng)建一個(gè)iexplorer.exe進(jìn)程用于和這個(gè)Tab綁定,那么我開(kāi)啟10個(gè)Tab以后,是10個(gè) 進(jìn)程嗎?實(shí)際的測(cè)試結(jié)果是:不一定。具體創(chuàng)建多少個(gè)Tab進(jìn)程實(shí)際是由IE框架確定的,根據(jù)目前已知的結(jié)論,IE框架會(huì)根據(jù)可用的物理內(nèi)存大小確認(rèn)最多創(chuàng) 建幾個(gè)Tab進(jìn)程。
注:默認(rèn)情況下,我的2臺(tái)筆記本(物理內(nèi)存均配置了4GB,可用內(nèi)存一般在1.5GB左右)在Windows Vista里面,創(chuàng)建的Tab進(jìn)程最多是5個(gè)。
那么,是否有可能控制Tab進(jìn)程的數(shù)量呢?答案是可以的。IE8 Frame在啟動(dòng)的時(shí)候,會(huì)檢查注冊(cè)表
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下面的TabProcGrowth鍵值(鍵值類(lèi)型DWORD),利用這個(gè)鍵值,就可以操作IE8的Tab數(shù)量了。
TabProcGrowth=0 | IE框架和Tab工作在一個(gè)進(jìn)程里面,Tab采用線程的方式創(chuàng)建。 當(dāng)TabProcGrowth=0的時(shí)候,IE的保護(hù)模式(Protect Mode)會(huì)關(guān)閉,這種模式類(lèi)似于在Windows Vista下面把 IE7 以 run as administrator方式啟動(dòng)。 |
TabProcGrowth=1 | IE框架和Tab工作在不同的進(jìn)程里面。 但是Tab按照不同的mandatory integrity level (MIC)創(chuàng)建,舉例就是需要關(guān)閉保護(hù)模式的Tab工作在一個(gè)瀏覽進(jìn)程里面,另外的工作在另外的一個(gè)瀏覽進(jìn)程里面。 例 如:我把taobao.com和kztechs.com加入了Trusted Site列表里面,當(dāng)使用這個(gè)模式的時(shí)候,訪問(wèn)taobao.com和kztechs.com的時(shí)候,Tab將工作在一個(gè)進(jìn)程里面,而訪問(wèn)其他的站點(diǎn)的時(shí) 候,Tab將工作在另外的一個(gè)進(jìn)程里面。 這是因?yàn)榧尤隩rusted Site列表以后,IE的保護(hù)模式會(huì)關(guān)閉,MIC等級(jí)的不同造成了的不同的Tab進(jìn)程的出現(xiàn)。 |
TabProcGrowth>1 | 在這個(gè)模式下,TabProcGrowth的值將決定最多創(chuàng)建的Tab進(jìn)程數(shù)目。如果TabProcGrowth為100,那么最多創(chuàng)建100個(gè)Tab進(jìn)程。 |
TabProcGrowth 不存在(默認(rèn)情況) | 使用默認(rèn)的機(jī)制,根據(jù)可用的物理內(nèi)存數(shù)量決定Tab進(jìn)程的數(shù)量。 |
關(guān)于IE8 LCIE的FAQ:
1、為什么不是每個(gè)Tab一個(gè)進(jìn)程,而有一個(gè)上限呢?
因 為創(chuàng)建一個(gè)進(jìn)程的開(kāi)銷(xiāo)是遠(yuǎn)遠(yuǎn)大于創(chuàng)建一個(gè)線程的,創(chuàng)建一個(gè)進(jìn)程,需要重新加載所有相關(guān)的模塊,而且進(jìn)程間的切換也會(huì)帶來(lái)很大的性能損耗。IE8的LCIE 機(jī)制在達(dá)到Tab進(jìn)程最多數(shù)目以后,后續(xù)的新開(kāi)網(wǎng)頁(yè)將將采用負(fù)載平衡的機(jī)制讓不同的Tab進(jìn)程進(jìn)行處理,以達(dá)到資源的最大利用。
2、LCIE模型里面,會(huì)話是怎么處理的?我怎么感覺(jué)到不同的Tab都使用的是同一個(gè)會(huì)話呢?
的確,因此Tab進(jìn)程的出現(xiàn),會(huì)話的處理是比較關(guān)注的一個(gè)點(diǎn)。在IE8里面,會(huì)話是和IE框架綁定的, 在這個(gè)IE框架下的所有Tab,共享同一個(gè)會(huì)話,具體來(lái)說(shuō)就是:假設(shè)第一個(gè)Tab進(jìn)程訪問(wèn)了msdn.microsoft.com網(wǎng)站并屬于了Live ID登錄以后,后續(xù)新開(kāi)的Tab進(jìn)程如果也訪問(wèn)了msdn.microsoft.com網(wǎng)站,那么是共享剛才的Live ID的,除非過(guò)期;而且,即使你從開(kāi)始菜單里面點(diǎn)擊IE圖標(biāo),新創(chuàng)建的窗口也是使用先前的會(huì)話的。
3、在LCIE模型里面,如果讓不同的窗口使用不同的會(huì)話呢?
要在IE8里面,讓不同的窗口使用不同的會(huì)話,可以點(diǎn)擊文件菜單-->新建會(huì)話菜單項(xiàng),使用這個(gè)方式,新創(chuàng)建的窗口將采用一個(gè)新的會(huì)話,以便和之前的會(huì)話區(qū)分開(kāi)來(lái)。
4、為什么有時(shí)候IE8 Tab進(jìn)程在訪問(wèn)的頁(yè)面關(guān)閉以后,Tab進(jìn)程還是存在呢?
這 是為了性能考慮的,防止用戶馬上又新開(kāi)一個(gè)窗口,前面說(shuō)過(guò)創(chuàng)建一個(gè)Tab進(jìn)程是需要很多資源的。在默認(rèn)情況下,IE8的Tab進(jìn)程在網(wǎng)頁(yè)窗口關(guān)閉以后,將 駐留60秒時(shí)間,然后再退出。當(dāng)然,我們也可以通過(guò)設(shè)置注冊(cè)表 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下的TabShutdownDelay DWORD鍵值來(lái)控制Tab進(jìn)程的退出時(shí)間。注意:TabShutdownDelay的單位是毫秒(1秒等于1000毫秒)。
文末:
IE8 相對(duì)于IE7來(lái)說(shuō),無(wú)論是進(jìn)程框架和渲染引擎都得到了極大的改善和優(yōu)化,而且在各種標(biāo)準(zhǔn)支持方面都比IE7好了不少,雖然IE8不是最快的瀏覽器,也不是 應(yīng)試分?jǐn)?shù)最好的瀏覽器,但是無(wú)論是兼容性還是安全性方面,都是值得大家去安裝的。如果你是因?yàn)槭懿涣薎E7的慢而使用FireFox或Chrome瀏覽器 的,現(xiàn)在可以再體驗(yàn)一下IE8,相信會(huì)比IE7有著明顯的改善的,呵呵。
聯(lián)系客服