首页 > 代码库 > 移动浏览器的内核WebKit介绍

移动浏览器的内核WebKit介绍

Hybrid App是运行在移动操作系统的WebView上面的,我们可以在原生页面中嵌入HTML5网页,WebView就是这个网页的容器。WebView实际上是一种嵌入式的编程接口,WebView调用底层的浏览器内核如WebKit或Blink等解析网页,因此浏览器的内核决定了Hybrid App HTML5页面的展示效果和用户体验,目前市场上主流移动设备WebView的内核基本上是Webkit,包括苹果iOS系统和Android 4.4以前的版本。

浏览器内核通常也被称为渲染引擎。所谓的渲染,就是根据描述或者定义构建数学模型,通过模型生成图像的过程。 浏览器的渲染引擎就是能够将 HTML/CSS/JavaScript 文本及其相应的资源文件转换成图像结果的模块。

目前移动设备浏览器上常用的内核有Webkit,Blink,Trident,Gecko等,其中iPhone和iPad等苹果iOS平台主要是WebKit,Android 4.4之前的Android系统浏览器内核是WebKit,Android4.4系统浏览器切换到了Chromium,内核是Webkit的分支Blink,Windows Phone 8系统浏览器内核是Trident。

移动浏览器内核WebKit介绍

WebKit是目前主流的移动浏览器渲染引擎,主要设计是用来让网页浏览器绘制网页。WebKit目前作为AppleSafari及Google Chrome(直到版本27)等浏览器的主要引擎。根据StatCounter的浏览器市场份额调查,于2012年11月,Webkit市占超过了40%,它已经成为拥有最大市场份额的排版引擎,超越了InternetExplorer所使用的Trident及Firefox所使用的Gecko引擎。Webkit也作为一些实验性质浏览器的基础引擎,包含Amazon Kindle 电子书阅读器,同时也使用在下列移动操作系统的默认浏览器,包含苹果电脑iOS、Android, BlackBerry Tablet OS、Bada、Tizen及webOS。WebKit的C++应用程序接口提供了一系列的Class让我们可以在视窗上显示网页内容,并且实现了一些浏览器的特色,包含使用者链接点击、管理前后页面列表以及使用者曾经访问过的历史页面等等。

WebKit的HTML及JavaScript源代码源自于KDE的KHTML及KJS程序库,现在已经由KDE、苹果电脑、诺基亚、Google、Bitstream、RIM、Igalia等进行独立专案开发。OS X、Windows、GNU/Linux以及其他类Unix系统操作系统,皆支援这个专案。

WebKit的WebCore及JavaScriptCore元件使用GNU宽通用公共许可证开源,而其他的WebKit元件则采用BSD许可证开源。

WebKit2发布于2010年4月8日,Webkit2的目标是将元件抽象化,并提供更干净的网页渲染,它会利用从周围的界面或是应用程式的壳,建立一个环境使网页的内容(JavaScript、HTML、排版等等)将会在另外一个程序(Process)运行,比起WebKit,这个抽象化的做法打算令WebKit2可重复使用一个更简单的程序。因为WebKit2对比起WebKit有 一个不相容的API ,所以导致他的名字被改变为WebKit2。

 

截至2013年3月7日,Webkit商标已被苹果公司在美国专利及商标局注册为其拥有商标。

 Chromium和Blink内核介绍

Blink是一个由Google和OperaSoftware开发的浏览器渲染引擎,Google将这个渲染引擎作为Chromium计划的一部分,并且在2013年4月的时候公布了这一消息。这一渲染引擎是开源引擎WebKit中WebCore组件的一个分支,并且在Chrome(28及往后版本)、Opera(15及往后版本)和Yandex浏览器中使用。

由于搭载iOS和Android系统智能手机称霸全球手机市场,苹果和Google也因此成为WebKit最大的推动者,并促使其成为目前最大的浏览器引擎。

早期的WebKit架构比较简单,在API层不支持多进程,因此无法发挥多核CPU的硬件性能。为此,苹果进行了扩展,提出了新一代架构WebKit2,同时,Google的跨平台浏览器Chromium也基于原来的WebKit提出了自己的Chromium沙箱架构,两者不兼容(参见:http://blog.csdn.net/shunzi__1984/article/details/6196483)。

但是由于苹果在这个开源系统中有更多的话语权,因此Google只好被动接受,使用移植的方式来实现和主线WebKit2的对接,这增加了Chromium的复杂性,也影响了Chromium的架构移植工作。

显然,浏览器对Google的重要性远胜于苹果,在自己的核心领域绝不能受制于人,因此Google决定利用WebKit的成果,开发自己的Blink引擎。

2013年4月,Google宣布将为Chrome浏览器开发新的自主渲染引擎Blink,与WebKit分道扬镳,在未来10周内用Blink取代旗下所有平台的现有浏览器渲染引擎。随后Opera宣称将追随Google,放弃WebKit支持Blink浏览器引擎。

Google的策略很简单,先做减法,再做加法。Google已经公开表示,在最初阶段Blink不会进行太大调整,但将很快从WebKit代码库中删除7个软件包和7000个文件。2013年5月份的Google I/O大会上的信息显示,他们的团队已经从 Webkit 中拉取了 880 万行臃肿代码,其中的 450万行被当即废止。目前Google同时保留着Blink和WebKit两个开发团队,这两个团队都在着手剔除那些觉得不必要的功能。这种策略确保了WebKit开发者有一个平稳的过渡期,慢慢适应新的API变化。

在最新的Android4.4 Kitkat版本中,原本基于AndroidWebKit的WebView实现被换成基于Chromium的WebView实现。在前面的章节中,笔者也介绍过基于Chromium的WebView实现即将成为Android系统上的缺省实现方式,笔者也一直期待这一重大转变,现在它真的发生了。而之前基于WebView接口的应用程序甚至可以直接工作在该实现上而不需要任何特别的改变。举个例子来说,Android系统上的缺省浏览器(AOSP中的浏览器),可以不需要任何改变直接工作在新的实现上。WebView只是一个接口类,通过一些内部设计的改变,其具体的实现可以在之前的Android WebKit和Chromium之间进行切换。新的Chromium实现专注于提供一致性的接口(为了兼容以前的应用),而内部的渲染引擎改为使用基于Blink/Content内核的引擎,这实现不管是从功能上还是性能来讲,都带来巨大的提升。

移动浏览器的内核WebKit介绍