近日,来自Apple的开发者Anders Carlsson 在邮件列表中发布了WebKit2,新版本完全重新设计,以支持类似于Chrome和IE8的多进程模型。这样在主流浏览器中,只剩下基于Gecko的 Firefox和基于Presto的Opera还没有采用多进程。
采用这种模型,网页的内容(JavaScript,HTML,以及布 局等)将各自拥有独立的进程。这一机制是通过两个主要的子系统(CoreIPC和DrawingArea)来支持的。这种模型和Google Chrome的最大不同在于,WebKit直接把独立进程模型放进了一个框架中,因此也能被其他客户端使用(事实上,历史上除了浏览器之外,苹果的邮件客 户端和微软的个人信息管理软件都使用过WebKit内核)。
OSNews文章透露,从技术上说,Webkit的常规版本中没有进程边 界,因为应用和渲染器在一个进程里,但是应用和WebKit API之间有API边界。而在Google Chrome/Chromium里,API边界之上还有进程边界,因此很难为其他WebKit实现所用。
按Webkit2维基的说 法,Chromium WebKit并没有直接提供多进程框架,而是进行了精巧优化,本身只是多进程应用的一个组件,而由应用自己来负责代理和进程管理。由于负责进程管理、进程 间代理和沙盒处理的关键逻辑都属于Chrome应用而非API层,所以重用非常困难。
而在WebKit 2中,在API边界之下还有进程边界,因此多进程浏览也成为API的一部分。同时,这也使WebKit 2与之前的版本不再兼容。
目前,WebKit2已有Mac和Windows平台版本,Carlsson表示,如果有其他开发者推出其他平台的移植版,他们将乐观其成。
另据Ars Technica的分析文章(翻译:锐商企业CMS 网站内容管理系统 ),Webkit2 的目标是实现独立进程与非阻断式API。基于Webkit 的Google Chrome 浏览器在2008年推出时就已经实现了独立进程功能,该功能可以防止因某个网页的崩溃而导致整个浏览器崩溃。
IE8 也有一个类似机制防止崩溃,而 Firefox 也正联合 Electrolysis 展开同样的开发。Mac 操作系统中的 Safari 4 则通过将 Flash 一类的插件放到单独的进程防止崩溃,Webkit2 则直接将这种能力内置到渲染引擎中。
比如,在一个程序中,假如我需要加载一个网页,我可以调用一个诸如loadWebsite的方法(只是举例),将URL参数传递给这个方法,接着,给它一个Callback函数或一段代码,在网页加载完成后执行。
通过这种方法,每当Webkit 2执行完某个操作的时候,开发者都可以通过Callback函数及时同它交互,这样,渲染引擎工作的时候,主进程可以继续做自己的事,渲染引擎完成工作会 通过 Callback 函数通知并执行你预设的代码,让你的程序反应更敏捷。目前,有三种技术可以帮助实现这一目标,消息式客户Callback,策略式客户Callback 以及客户策略设置。还有第四方法,通过代码注入直接同DOM 沟通,但这一方法目前还没有具体实施,苹果公司的Anders Carlsson在该项目的主页中对此做了详细阐述。
Webkit2 引擎最好的地方在于,任何基于Webkit 2 的产品都可以直接使用这些功能,而不必像Google Chrome 那样自己解决,开发者借助Webkit 2 可以轻松实现更稳定的产品。