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

- 作者：邓侃
- 发布时间：2009-03-17 12:12
- 分类：公司
- 原文：https://www.ifanr.com/16968

为什么需要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&#95;7dcc22b49a](https://s3.ifanr.com/wp-content/uploads/2010/08/1411089398_7dcc22b49a_thumb.jpg "1411089398&#95;7dcc22b49a")](https://s3.ifanr.com/wp-content/uploads/2010/08/1411089398_7dcc22b49a.jpg)

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](https://s3.ifanr.com/wp-content/uploads/2010/08/File_thumb7.jpg "File")](https://s3.ifanr.com/wp-content/uploads/2010/08/File6.jpg)

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渲染和控制的基石，这个问题比较复杂，留给下一章讨论。
