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