WebKit 是一个排版引擎,主要设计是用来让网页浏览器绘制网页。webkit 不是一个完整的不可分割的部分,它主要包括 webcore 渲染引擎、javascriptcore 的 js 引擎和其他的元组件等。
1. webkit 简介 #
webcore 包含了浏览器引擎的核心部分,如处理 html、DOM、css、svg、获取资源、渲染页面过程控制、回调/通知外壳程序以及与 JavaScript 实现的 Binding 等。ebCore 是一个由 WebKit 专案所开发的布局(Layout)、渲染(Rendering)及 HTML 和 SVG 的 DOM 函式库,完整的程式码皆由 GNU 宽通用公共许可证所授权,WebKit 框架包装了 WebCore 及 JavaScriptCore,并提供一个 Objective-C 应用程序接口来接介由 C++所开发的 WebCore 渲染引擎及 JavaScriptCore 脚本引擎,透过 Cocoa API 就可以在应用程序中很简单的使用这些元件。之后的版本同时包含了一个跨平台的 C++抽象平台,并且提供各种 API 使用。
JavaScriptCore 是一个在 WebKit 中提供 JavaScript 引擎的框架,而且在 OS X 作为其他内容的脚本引擎。JavaScriptCore 最初是为 KDE 的 JavaScript 引擎(KJS)函式库及 PCRE 正则表达式函式库,JavaScriptCore 从 KJS 及 PCRE 复刻之后,已比原先进步了许多,有了新的特色以及极大的效能改进。
在 2008 年六月二日,WebKit 专案宣布,将被重写为"SquirrelFish",它是一个字节码直译器,这个专案演变成 SquirreFish Extreme(简称为 SFX,市场称之为 Nitro),首次公开于 2008 年九月十八日,它会将 Javascript 编译为原生的机器语言,不再需要字节码直译器,同时加速了 JavaScript 的执行效率。
WebKit 的优势在于高效稳定,兼容性好,且源码结构清晰,易于维护。
2. webkit 起源 #
2.1 webkit 来源 #
WebKit 的 HTML 及 JavaScript 程式码源自于 KDE 的 KHTML 及 KJS 函式库,现在已经由 KDE、苹果电脑、诺基亚、Google、Bitstream、RIM、Igalia 等进行独立专案开发。OS X、Windows、GNU/Linux 以及其他类 Unix 系统操作系统,皆支援这个专案。
webkit 的程式码源自 1998 年所开发的 KDE 的 HTML 排版引擎 HTML 及 KDE 的 JavaScript 引擎 KJS 的程式码。Apple 的工程师 Don Melton 与 2001 年 6 月 25 日开始了 webkit 这个专案,当时的 webkit 仅为 KTML 及 KJS 的复刻,不过经过 Apple 自己的研发与修改后,重新命名为 webcore 及 JavaScriptcore。
KHTML 和 webcore 有着两个不同的团队进行维护,各自的目的也不是很相同,所以他们程式码互相补丁的难度越来越高。后再 Apple 在 CVS 发布了他们自己维护的 webkit 版本,在 apple 及 KHTML 开发者也一起维护 webkit,许多 KHTML 的开发者也成为了 webkitSVN 代码库的审查者及提交者。
2.2 webkit 开源 #
在 2005 年六月七日,Safari 开发者戴夫·海厄特(Dave Hyatt)于他的 blog 宣布 Apple 将把 Webkit 开源(之前仅有 WebCore 及 JavaScriptCore 开源),并且开放了 WebKit 的 CVS 程式库以及臭虫数据库工具。这项消息由苹果电脑软件工程的高阶副总(Senior Vice President)Bertrand Serlet 于苹果电脑 2005 年的 Worldwide Developers Conference 公开。
在 2005 年十二月月中,可缩放向量图形的支援被加入了标准版本,在 2006 年一月月初,这项程式码从 CVS 转移至 Subversion。
WebKit 的 JavaScriptCore 及 WebCore 元件目前以 GNU 宽通用公共许可证方式授权,而其他的 WebKit 元件则是以 BSD 授权公开。
在 2007 年一开始,开发团队开始实现层叠样式表(CSS)的扩充,包含动画、转换(transitions)以及 2D 和 3D 的转场(transform),这样的扩充在 2009 年 W3C 的标准中被列入草案。
在 2007 年十一月,这项专案宣布,他们已经完成了 HTML5 媒体特色的支援,允许页面中以原生的方式嵌入影片,并且可以被 script 所控制。
在 2008 年六月二日,WebKit 专案宣布他们重写了 JavaScriptCore,被称为"SquirrelFish",它是一个字节码直译器(Bytecode Interpreter),这项专案验后来变成 SquirrelFish Extreme(SFX),它可将 JavaScript 编译为机器语言而不再需要直译器,这样的做法加速了 JavaScript 的执行,这项专案于 2008 年九月 18 发布。一开始,SFX 仅支援 x86 架构,于 2009 年一月底,SFX 于 OSX 支援了 x86-64 架构,并且在该平台通过了所有的测试。
WebKit2 发布于 2010 年 4 月 8 日,WebKit2 的目标是将元件抽象化,并提供更干净的网页渲染,它会利用从周围的界面或是应用程序的壳,建立一个环境使网页的内容(JavaScript、HTML、排版等等)将会在另外一个进程(Process)运行,比起 WebKit,这个抽象化的做法打算令 WebKit2 可重复使用一个更简单的程序。因为 WebKit2 对比起 WebKit 有一个不相容的 API,所以导致他的名字被改变为 WebKit2。
目前 WebKit2 仅开放于 Mac、Windows 及 MeeGo-Harmattan。
3. webkit 兴起与使用 #
WebKit 目前作为 Apple Safari 及 Google Chrome(直到版本 27)等浏览器的主要引擎。根据 StatCounter 的浏览器市场份额调查,于 2012 年 11 月,Webkit 市占超过了 40%,它已经成为拥有最大市场份额的排版引擎,超越了 Internet Explorer 所使用的 Trident 及 Firefox 所使用的 Gecko 引擎。Webkit 也作为一些实验性质浏览器的基础引擎,包含 Amazon Kindle 电子书阅读器,同时也使用在下列行动操作系统的预设浏览器,包含苹果电脑 iOS、Android, BlackBerry Tablet OS、Bada、Tizen 及 webOS。WebKit 的 C++应用程序接口提供了一系列的 Class 让我们可以在视窗上显示网页内容,并且实现了一些浏览器的特色,包含使用者连结点击、管理前后页面列表以及使用者曾经拜访过的历史页面等等。
作为渲染引擎使用的 WebKit,被使用在 Safari 及 Google Chrome 浏览器于 Windows、OS X、iOS 及 Android 平台(然而,Chrome 仅仅使用 WebCore,而 JavaScript 引擎及多工系统则自行开发)。其他的在 OS X 底下的应用程序也使用 WebKit,例如 Apple 的 e-mail 用户端软件 Mail 以及微软的个人信息管理系统 Microsoft Entourage 2008,皆使用 WebKit 来渲染 HTML 内容的 e-mail 讯息。
Opera 软件公司于 2013 年初宣布,他们将停止他们自行开发的 Presto 排版引擎,由 Webkit 专案取代,在未来将会以 Webkit 来取代,并贡献给 Webkit 专案。
在 2013 年四月 3 日,Google 宣布他将自行开发 WebCore 的分支,也就是 Blink 引擎。Chrome 的开发者由于希望在浏览器的开发上拥有更大的自由度,同时避免与上游冲突,更可透过移除 Chrome 没有使用的元件而简化自己的程式库,所以决定开发 WebKit 的分支版本。同时 Opera 软件在同年稍早也宣布,他们将自有引擎转换到 Chromium 的程式库,在此时也同时转换到 Blink 的分支。根据这份声明,WebKit 的开发者开始讨论移除 Chrome 相关程式码的可能性,以精简整个 WebKit 程式库。