1. 程式人生 > >Webkit核心探究【1】——Webkit簡介

Webkit核心探究【1】——Webkit簡介

注:【轉載請註明文章來源、保持原樣】

出處:http://www.cnblogs.com/jyli/archive/2010/01/31/1660355.html
作者:李嘉昱

研究Webkit核心已經有一段時間了,在這期間我花了很多時間去研讀webkit程式碼,並在網上查閱了不少的資料。在這之後,我開始嘗試對Webkit核心進行剪裁,以便得到自己所需的部分。

俗語有言,“獨學而無友 則孤陋而寡聞”,遂本著交流的態度拿出來與大家分享之,順便回顧一下自己這段時間以來走過的路。到目前,本人雖不能說是精 通Webkit核心 ,但也總算是在Webkit核心中游歷過了一番,並獲得了不少Webkit核心程式碼的直接經驗。

在此,我將以Webkit核心程式碼為基礎,詳細介紹Webkit核心的組成以及其各個模組的功能和實現。文章寫到哪算哪,有了新的認識也會更新,補充。

 

什麼是Webkit


Wekbit是一個開源的Web瀏覽器引擎,也就是瀏覽器的核心。Apple的Safari, Google的Chrome, Nokia S60平臺的預設瀏覽器,Apple手機的預設瀏覽器,Android手機的預設瀏覽器均採用的Webkit作為器瀏覽器核心。Webkit的採用程度由 此可見一斑,理所當然的成為了當今主流的三大瀏覽器核心之一。另外兩個分別是Gecko和Trident,大名鼎鼎的Firefox便是使用的Gecko 核心,而微軟的IE系列則使用的是Trident核心。雖然目前市場上IE核心瀏覽器仍然佔據大多數市場份額,但其他核心瀏覽器也大有後來居上之勢。其 中,Webkit作為一款優秀的瀏覽器核心,它眾多優秀的特性引起業內的的廣泛關注。尤其是近來,google的加入更是讓Webkit有所升溫,從 Goole Chrome瀏覽器, Goole Anroid手機作業系統內建瀏覽器均採用Webkit作為核心, 近來推出的Chrome OS更是讓人期待。從實現角度來講,據說其比Gecko程式碼更為整潔清晰,我目前還沒研究過Gecko的程式碼,所以還無從比較。

 

Wekbit做了什麼?


作為瀏覽器的核心,Webkit做了哪些工作?為了瞭解這些,先讓我們來看下一個Web瀏覽器究竟做了什麼。我們可以從輸入輸出的角度來看一個 Web瀏覽器為我們做了哪些工作。先看一個簡單的例子,Web瀏覽器的輸入是一個HTML文件,輸出則是一個我們用眼睛所看到的一個Web頁面, 就普通使用者而言它的輸入和輸出就是這麼簡單,如下圖所示。

那麼Webkit的輸入和輸出又是什麼呢?如果能明白這個,那我們就能很清楚的知道Webkit到底是做什麼的了。不過現在要說清楚這個還有點困 難,因為Webkit的輸出就要複雜些了,因為它的輸出本來就非直接面向用戶,現在簡單點來說,Webkit的輸入是web 文件,輸出是一些看不見的模型,瀏覽器上層藉助於這些模型來繪製出我們所看到的實際頁面。後面適當的時候會更具體的探討這些模型。

 

Wekbit組成

 


 

Webkit實際上包含三大部分,至少從程式碼結構上來說是這樣的,當然,如果細分的話還能夠劃分出更多的模組。如下圖所示

其中,WebCore是Webkit的核心部分,它實現了對文件的模型化,包括了CSS, DOM, Render等的實現, JavaSript Core顯然是對JavaSript支援的實現。而橘黃色標註的Webkit部分包含了很多不同平臺對Webkit封裝的實現,即抽象出了與瀏覽器所能直 接對應的一些概念的實現,如,WebView,WebPage, WebFrame等。這三部分共同構成了Webkit, 在原始碼中,它們分別對應這個這三個目錄, 即Webkit三大部分為WebCore, JavaSript Core,Webkit。

 

應用程式如何利用Webkit的

 


 

從下圖可以看出,利用Webkit的應用程式的位置處於Webkit模組之上,應用程式並不直接和WebCore以及JavaScript Core來打交道,也不需要和它們打交道,而是同我前面提到過的Webkit模組來互動,從而遮蔽了WebCore和JavaSript Core部分。Webkit模組實際上抽象出了大多數應用程式所需要的那一部分,這裡所說的大多數應用程式其實就是指的瀏覽器, 對於實現一個瀏覽器而言,Webkit模組所提供的介面已經足夠。不過對於某些應用,可能得對其實施一定的改造,但是話又說回來,Webkit本來就是被設計成為Browser的核心而被實現的。

看到這裡,也就是說如果我們要想利用Webkit來實現一個功能完善Browser或其他類瀏覽器應用程式的話,你只需要瞭解Webkit模組部分 就足夠了,更確切的說只需要瞭解它所提供的介面就夠了。事實上,大多數平臺,如果採用了Webkit核心作為瀏覽器核心元件的話,所提供的對應文件部分都 是關於Webkit模組所提供的介面的描述。很多平臺都提供了Browser元件,其使用方法就像是其他可視元件一樣,在應用程式中應用起來非常方便。比 如,某平臺提供了叫做WebView的視覺化元件,我們就可以通過如下幾行程式碼來展示一個網頁, 使用的程式碼僅僅三行。

WebView *view = new WebView();

view->load(Url("http://www.google.cn"));

view->show();

以Webkit作為瀏覽器元件的平臺有不少,包括Symbian S60, Android, Qt, GTK等等,前不久看到訊息,好像Black Berry也準備在自家的手機上使用Webkit了。