首先我们看一下IE 7的进程模型
(图片引自于IE8 Team Blog)
在Vista的IE7当中(注:不能是XP),由2个进程掌管,一个是ieuser.exe,另外一个是iexplore.exe,其中ieuser.exe运行在medium的完整性级别,起着决定iexplorer.exe这个进程的完整性级别。
这里可以做个实验:在IE7里面打开2个空的Tab,然后分别在2个Tab上打开www.baidu.com和www.taobao.com,由于淘宝网需要运行在保护模式关闭的IE7进程下,因此此时会弹出一个新的IE页面来显示淘宝网的内容。
注意此时有2个IE的页面,从上面的图中就可以知道为什么了。因为在IE7当中,一个IE页面对应着一个iexplorer.exe的进程,而一个 iexplorer.exe进程中的所有Tab都必须是相同的完整性级别。如果不同完整性级别的Tab出现,那么需要新开IE页面。
这个时候,用Process Explorer来分析一下2个进程:
再来看一下IE8的进程模型:
(图片引自于IE8 Team Blog)
在IE8里面的进程模型有了很大的变化,Smallfrogs的文章里面也介绍了很多,关键就在于IE8里面每个Tab都有一个iexplorer.exe的进程。
同样刚刚的实验放在IE8里面,就会发现,在一个IE8的页面里面可以同时运行百度和淘宝的Tab。
这是因为在IE8里面,取消了ieuser.exe这个进程,我猜测这也是IE8的运行速度加快很多的主要原因。其次就是一个Tab一个进程,使得在IE8下面的所有Tab都可以被装入一个IE页面,而不要再像IE7那样,同样完整性级别的Tab共享一个 iexplorer.exe进程。这样,我们平时浏览不同完整性级别的网页的时候,就不需要切换IE的窗口,而只需要切换Tab就可以了。
这个时候,同样用Process Explorer来分析一下2个进程:
说了这么多,当然要说一下之所以IE8的进程模型要如此Design的原因,原因在smallfrogs的文章当中早有提出,这里引用一下:
“这种设计的好处就是一个Tab崩溃以后,只会影响这个Tab,对于其他的Tab是不影响的。同时,最外面的框架进程能够知道子Tab的情况,也就能够很好的实现“灾难恢复”了。”
本文来源:不详 作者:佚名