新时代新潮流 WebOS【10】为什么需要 Webkit?

公司

2009-03-17 12:12

为什么需要 Webkit?或者,为什么不?

上一篇说到 Palm WebOS 的 GUI 系统,沿袭了 X Window System 的双层结构,1. Window Server,负责图形绘制,以及捕捉来自鼠标,键盘等等的事件。2. Window Manager,主要负责控制开启和关闭 windows,放大缩小拖拽等等动作。

照理说,GUI 的故事应该就此结束,但是为什么 Palm WebOS 的 GUI 系统,要基于 WebKit 之上呢?

提起 WebKit,大家自然而然地想到浏览器。作为浏览器内部的主要构件,WebKit 的主要工作是渲染。给定一个 HTML 文件,WebKit 的工作是把 HTML 格式的内容绘制出来,包括,a. HTML 的布局,譬如左边是什么,顶部是什么,中间是什么。b. 根据用户设定,呈现文字,譬如字体是宋体还是楷书,大小尺寸,重体斜体等等。c. 显示不同格式的图片,譬如 JPG,GIF,PNG 等等。所以,WebKit 是一个渲染机(Rendering Engine)。

浏览器与用户的交互,主要通过 JavaScript 程序控制。譬如用户在浏览器界面上移动鼠标,有些图标会放大或缩小,颜色会变化等等。严格说来,JavaScript Engine 不属于 WebKit,但是 WebKit 自带了一个 JavaScript Engine,SquirrelFish。不过在 WebKit 框架下,可以把 SquirrelFish Java Engine 替换成其它版本,而不影响 WebKit 整体工作。譬如,Google 的 Chrome 浏览器,内部使用的渲染机是 WebKit,但是 Google 没有用 SquirrelFish,而是自己另起炉灶开发了一套 JavaScript Engine,取名 V8。V8 的来历不清楚,或许是因为 Google 的工程师喝多了 V8 果蔬饮料,所以就取了这么个名字。就如同 Sun Microsystems 的工程师喝多了咖啡,于是把他们发明的新语言定名为 Java 一样。

1411089398_7dcc22b49a

Figure 1. V8 drink
Courtesy http://farm2.static.flickr.com/1173/1411089398_7dcc22b49a.jpg

说起渲染机(Rendering Machine),微软的 IE 浏览器用的 Rendering Engine,名曰三叉戟(Trident)。Firefox 用的 Rendering Engine,叫 Gecko。而 Apple 的 Safari,以及 Google 的 Chrome,用的 Rendering Engine 都是 WebKit。

虽然 IE 浏览器占据大部分市场份额,但是似乎谈论 Trident 的文章不是很多。而 Firefox 使用的 Gecko,它的特点是小,有点像 OS 的微内核一样,扩展性很好。最近几年,谈论 WebKit 的文章很多,甚至有人断言,WebKit 是当今最好的 Rendering Engine。WebKit 之所以大热,估计与以下几个因素有关。

1. WebKit 的前身是由开源的 Linux 项目组 KDE 设计开发的 KHTML,后来 Apple 觉得这个产品不仅开源,而且架构设计简洁高效,所以就参与开发。再后来,在产品未来开发计划上,Apple 与 KDE 产生分歧,于是各干各的,Apple 把产品名字改为 WebKit。
2. 基于 WebKit,Apple 公司于 2003 年推出 MacOS 平台的浏览器,Safari。
3. 2005 年,WebKit 源代码向公众开放。
4. 同年,Nokia 推出 S60 平台的手机浏览器,其内部 Rendering Engine,也是 WebKit。
5. 同年,KDE 宣布放弃 KHTML,改用 WebKit。
6. 2007 年,Apple 推出手机 iPhone,引起轰动。iPhone 自带的手机浏览器,也使用了 WebKit。iPhone 的浏览器,缩放自如,引人注目。
7. 2008 年,Google 推出浏览器 Chrome,其内部 Rendering Engine,也是 WebKit。

需要指出的是,Rendering Engine 的用途,并不限于浏览器,而是可以充当通用的 UI 实现平台。譬如,微软的电子邮件软件 Outlook,虽然不是浏览器,但是其界面渲染,使用了微软的 Rendering Engine,Trident。甚至微软的 Office 系列软件,也使用了 Trident。

为什么要用 Rendering Engine 来处理渲染,而不是用 Java Swing 那样的 UI 工具?估计有两个原因。

1. 方便开发,吸引更多开发者。

Java Swing 固然不难用,但是广大开发者更熟悉 HTML+CSS+JavaScript。哪个手机能吸引更多开发者,它就能获得更多更好的应用程序。哪个手机能拥有更多更好的应用程序,它的市场前景就更广阔。使用 C/C++语言的开发者人数,不如 Java 的多。Java 的用户,不如 HTML+CSS+JavaScript 的多。Palm WebOS 之所以把 GUI 的管理基于 WebKit 基础之上,估计主要的目的是吸引广大 Web 开发者,这些人最熟悉的工具就是 HTML+CSS+JavaScript。

目前非常流行的 Web 开发工具,Ruby on Rails 的缔造者,David H. Hansson,于 2007 年 6 月发表过一篇博客,题为 “我就是喜欢 HTML+CSS+JavaScript,咋了?”(http://ajax.sys-con.com/node/395424)。文中表达了这么一个观点,以 HTML+CSS+JavaScript 为代表的 Web 技术源于实践,它们已经发展和经受了 10 多年的考验。现在大家要做的,不是去追求无必要的所谓完美,而是用好 HTML+CSS+JavaScript,把它们的潜力充分挖掘出来。

或许 David H. Hansson 的观点有点偏激,但是不可否认的是,他的观点有很多拥护者。基于 WebKit 之上的 GUI 系统设计,Palm WebOS 是不是有意迎合 Web 开发者?

2. 工作流程的柔性组织。

复杂一点的应用程序,通常由多个页面组成,页面与页面之间的衔接,称为工作流程。应用程序的更新,不仅涉及每个页面的内容的更改,而且也涉及工作流程的变更。

WebKit 这样的 Rendering Engine,不仅提供了单个页面的渲染,而且也提供了历史页面的缓存,支持后退(Back),前进(Forward)以及历史(History)等等功能。同时,WebKit 能够记忆用户对于每个页面做过哪些修改,甚至提供恢复(Undo)功能。

File

Figure 2. WebKit Rendering effect
Courtesy http://www.atoker.com/blog/wp-content/uploads/2008/06/ubrowser-webkit.jpg

单个页面的渲染,多个页面衔接而成的柔性工作流程组织,GUI 管理系统都需要提供支持。与其重新开发程序,不如利用现成的 WebKit 工具库。如果有人问,WebKit 与 Palm WebOS 的 GUI 管理系统,尤其是 Window Server 和 Window Manager 两个模块,是什么关系?或许可以这么猜测,Palm WebOS 在实现 Window Server 和 Window Manager 两个模块时,调用了 WebKit 相关 APIs。也就是说,Palm WebOS 把 WebKit 拆散了,作为工具库使用。

WebKit 的确有很多优势,但是并不完美。尤其是,能不能把 WebKit 原封不动地照搬到手机上来,作为手机 GUI 渲染和控制的基石,这个问题比较复杂,留给下一章讨论。

登录,参与讨论前请先登录

评论在审核通过后将对所有人可见

正在加载中

移动互联网的围观者、起哄者、以及肇事者。

本篇来自栏目

解锁订阅模式,获得更多专属优质内容