提起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一樣。
說起渲染機(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)功能。
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渲染和控制的基石,這個問題比較複雜