渲染引擎的職責就是渲染,即在瀏覽器窗口中顯示所請求的內容。html
默認狀況下,渲染引擎能夠顯示html、xml文檔及圖片,它也能夠藉助插件(一種瀏覽器擴展)顯示其餘類型數據,例如使用PDF閱讀器插件,能夠顯示PDF格式,將由專門一章講解插件及擴展,這裏只討論渲染引擎最主要的用途——顯示應用了CSS以後的html及圖片。web
本文所討論的瀏覽器——Firefox、Chrome和Safari是基於兩種渲染引擎構建的,Firefox使用Geoko——Mozilla自主研發的渲染引擎,Safari和Chrome都使用webkit。後端
Webkit是一款開源渲染引擎,它原本是爲Linux平臺研發的,後來由Apple移植到Mac及Windows上,相關內容請參考http://webkit.org。瀏覽器
渲染引擎首先經過網絡得到所請求文檔的內容,一般以8K分塊的方式完成。網絡
下面是渲染引擎在取得內容以後的基本流程:dom
解析html以構建dom樹 -> 構建render樹 -> 佈局render樹 -> 繪製render樹佈局
圖2:渲染引擎基本流程spa
渲染引擎開始解析html,並將標籤轉化爲內容樹中的dom節點。接着,它解析外部CSS文件及style標籤中的樣式信息。這些樣式信息以及html中的可見性指令將被用來構建另外一棵樹——render樹。插件
Render樹由一些包含有顏色和大小等屬性的矩形組成,它們將被按照正確的順序顯示到屏幕上。xml
Render樹構建好了以後,將會執行佈局過程,它將肯定每一個節點在屏幕上的確切座標。再下一步就是繪製,即遍歷render樹,並使用UI後端層繪製每一個節點。
值得注意的是,這個過程是逐步完成的,爲了更好的用戶體驗,渲染引擎將會盡量早的將內容呈現到屏幕上,並不會等到全部的html都解析完成以後再去構建和佈局render樹。它是解析完一部份內容就顯示一部份內容,同時,可能還在經過網絡下載其他內容。
圖3:webkit主流程
圖4:Mozilla的Geoko渲染引擎主流程
從圖3和4中能夠看出,儘管webkit和Gecko使用的術語稍有不一樣,他們的主要流程基本相同。Gecko稱可見的格式化元素組成的樹爲frame樹,每一個元素都是一個frame,webkit則使用render樹這個名詞來命名由渲染對象組成的樹。Webkit中元素的定位稱爲佈局,而Gecko中稱爲迴流。Webkit稱利用dom節點及樣式信息去構建render樹的過程爲attachment,Gecko在html和dom樹之間附加了一層,這層稱爲內容接收器,至關製造dom元素的工廠。下面將討論流程中的各個階段。