• 媒体品牌
    爱范儿
    关注明日产品的数字潮牌
    APPSO
    先进工具,先知先行,AIGC 的灵感指南
    董车会
    造车新时代,明日出行家
    玩物志
    探索城市新生活方式,做你的明日生活指南
  • 知晓云
  • 制糖工厂
    扫描小程序码,了解更多

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

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

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

正在加载中

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

本篇来自栏目

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