为了应对浏览器经常出现崩溃的现象,现在很多浏览器厂商都采用了多进程标签浏览的概念,其中包括主的IE8、Chrome、
Firefox浏览器,而众多基于WebKit的浏览器在苹果发布WebKit2内核以后已经将可以后采用多进程标签浏览这个功能。因为在在浏览器中添加多进程浏览功能之后,即使是浏览器其中的一个进程出现了崩溃现象,也不会牵连到其他浏览器窗口,从而有效的避免了整个浏览器的假死。微软曾有调查数据显示:70%的浏览器崩溃故障由插件引起。上述浏览器虽然都采用了多进程标签浏览概念,但他们在浏览器中执行多进程标签浏览的方法却是不同的。
1、微软IE8 Loosely-Coupled IE(LCIE) 在最新一代浏览器IE8中,微软添加了被称为“Loosely-Coupled
IE(LCIE)”的架构。 通过Loosely-Coupled IE(LCIE)架构,IE8将主要的浏览进程与渲染进程相隔离。
主要的进程处理浏览器、用户界面和框架(窗口),用于存储选项卡。在IE8中,多个选项卡是运行在相同的进程中的,不过不同安全级别的选项卡是相互分开的。ActiveX空间是通过选项卡进程进行处理的。
微软IE8多进程架构
微软IE8打开网站界面
2、谷歌Chrome/Chromium的多进程架构 谷歌Chrome是首款采用多进程浏览概念的浏览器,它还具备最为复杂的用于隔离浏览器各个组成部分的系统。
在Chrome中,谷歌通过out of process plugins(OOPP)功能将所有的插件进程(如Flash、Java、PDF阅读器等)与的浏览器进程隔离,进而提升Chrome浏览器的安全性。也就是说,即使是Chrome中有插件出现崩溃现象,也并不会影响整个浏览器的运行
总得来讲,谷歌Chrome和Chromium中包含以下4中主要的进程类型: *浏览器进程——用于处理用户界面和管理所有其他的进程,其运行在浏览器的最顶级;
*渲染进程——用于处理独立浏览器标签中的渲染,值得注意的是,一个渲染进程能够处理多个标签; *插件进程——每个浏览器插件如Adobe
Flash或Java都运行在它们自己的独立进程中,这些插件进程能够与各自的渲染进程互通; *扩展进程——浏览器中的扩展也拥有各自的独立进程,以避免互相干扰。
谷歌Chrome多进程架构
3、Mozilla Electrolysis和Out-of-process插件 相较于谷歌Chrome和微软IE8,Mozilla
Firefox是步入多进程行列中较晚的一款浏览器,其中所包含的多进程架构也不如Chrome或IE复杂。
Mozilla基金会在Firefox中添加多进程架构的目的就是隔离浏览器插件和浏览器的主要进程,项目代号为“Electrolysis”,正处于早期的测试阶段。
目前,Firefox 3.6.4 beta builds中已经包含了多进程处理能力。
Firefox中的多进程架构
4、WebKit 2中的多进程 前段时间,WebKit团队宣布,在即将发布的WebKit2中将会包含多进程浏览能力。换句话也就是说,采用WebKit
Web渲染引擎的大量浏览器中都将会引进多进程浏览功能。 虽然谷歌Chrome/Chromium使用的是WebKit引擎,不过他们的多进程架构是不同的。在Chrome中,谷歌在每个渲染进程中都包含一个WebKit渲染引擎,而WebKit
小组则计划将WebKit2渲染引擎自身分裂到多个进程中。 在WebKit2采用多进程浏览模型之后,网页的内容(JavaScript,HTML,以及布局等)将各自拥有独立的进程,这一机制是通过两个主要的子系统(CoreIPC和DrawingArea)来支持的。
WebKit2中的多进程浏览模型和Google Chrome的最大不同在于,WebKit直接把独立进程模型放进了一个框架中,因此也能被其他客户端使用。事实上,历史上除了浏览器之外,苹果的邮件客户端和微软的个人信息管理软件都使用过WebKit内核。
WebKit还是其它几个移动浏览器的基础,包括iPhone操作系统、谷歌的 Android、Symbian手机使用的S60
Web浏览器和Palm Pre。
WebKit中的多进程架构
检查浏览器进程模式的方法 在微软的Visual Studio工具包中就有一个小工具能方便的检测浏览器进程模式,这个工具叫做Spy++,
仅有400K大小,如果你的机器上没有,可以下载:spyxxx.zip,解开后即可运行,如果缺少spyhk55.dll文件,点击这里下载,解压到同一目录即可执行。
Spy+++运行后如下图所示:
点击红圈按钮,弹出下面的对话框,用这个对话框可以检查任意窗口的进程线程属性。
下面我们来检测一下Firefox浏览器3.5版本的进程模式,打开Firefox,任意打开两个网页,例如百度,google:
把刚才SPY++上的圆形小图标托拽到Firefox的百度网页上,放手,点SPY对话框OK按钮.
SPY++即可显示该网页窗口的属性,点Process页签,就可以看到该网页的进程及线程ID:
在Firefox中将google设为当前页,把刚才SPY++上的圆形小图标托拽到Firefox的google网页上,放手,点OK.
SPY++即可显示该网页窗口的属性,点Process页签,就可以看到该网页的进程及线程ID:
可以发现,在Firefox中,百度网页和google网页的进程ID和线程ID是一模一样的,这就很清楚的证明了Firefox3.5是款单进程单线程浏览器。 |