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好了很多。

相关文章
相关标签/搜索