特徵:支持不一樣瀏覽器,一部分代碼共享,另一部分不一樣,不一樣部分稱爲 WebKit 的移植(Ports),以下圖中虛線框表示不一樣瀏覽器中實現廣泛不一樣。編程
WebCore
部分包含了目前被各個瀏覽器所使用的共享部分,是加工渲染網頁的基礎。包括 HTML(解釋器)、CSS(解釋器)、SVG、DOM、渲染樹(ReaderObject 樹、ReaderLayer 樹等)、 Inspector(Web Inspector 開發者工具、調試網頁)JavaScriptCore
引擎是 WebKit 中的默認 JavaScript 引擎,WebKit 中對 JavaScript 引擎的調用是獨立引擎的。例如 Chromium 中替換爲 V8 引擎WebKit Ports
指的是 WebKit 中的非共享部分,包括硬件加速架構、網絡棧、視頻解碼、圖片解碼等WebCore
和 WebKit Ports
之上的層主要提供嵌入式編程接口,提供給瀏覽器調用。接口層的定義也與移植密切相關,而不是 WebKit 有一個統一接口。WebKit2 嵌入式接口不是 WebKit 嵌入式接口的簡單修改,而是爲了瀏覽環境的安全性和穩定性緣由考慮而引入了跨進程的架構。由蘋果於 2010 年 4 月發佈,WebKet2 的進程結構模型中至少有兩個進程,其一是 WebKit2 所在的瀏覽器或者 Web 平臺的 UI 進程,其二是 Web 進程,也就是網頁渲染所在的進程瀏覽器
Chromium 也是基於 WebKit(Blink)的,而且將不少先進的理念引入到瀏覽器中領域,能夠了解如何基於 WebKit 構建瀏覽器。安全
Chromium 的架構和主要模塊以下:網絡
從圖中能夠看到,Blink 只是其中的一塊,還有衆多的 Chromium 模塊,包括 GPU/CommandBuffer
(硬件加速架構)、V8 JavaScript 引擎、沙箱模型、CC(Chromium Compositor | Chromium 合成器)、IPC(進程間通訊)、NPAPI(Netscape Plugin API)、UI 等多線程
再向上就是 「Content 模塊」 和 「Content API(接口)」,他們是 Chromium 對渲染網頁功能的抽象。沙箱模型、跨進程的 GPU 硬件加速機制、衆多的 HTML5 功能都是在 Content 層裏實現,將渲染機制、安全機制和插件機制隱藏起來,提供一個接口供上層模塊使用。架構
好處:併發
Chromium 瀏覽器中主要包含的進程類型高併發
Android 版不支持插件,GPU 進程變成 Browser 進程的一個線程,Renderer進程會演變爲 Android 上的服務(service)進程。而且有「影子」標籤,會將後臺的網頁所使用的渲染設施都清除,當用戶切換的時候須要從新加載渲染。工具
Renderer 進程被建立的方式:post
由於 Chromium 中的一些類型和 WebKit 內部不一致,因此 Chromium 沒有直接使用 WebKit 的接口而是用粘附層進行了橋接。並在橋接層之上添加了用於進程間通訊的 Renderer,將渲染封裝成爲單獨的服務,屏蔽具體實現。
Browser 進程中也須要 RendererHost 來負責進程通訊,再向上就是 Web Contents,也就是一個一個的標籤頁和上層的瀏覽器UI
每一個進程內都有不少線程,保證 Browser 進程中的 UI 線程不會被任何其餘費時操做影響。Renderer 進程中,不讓其餘操做阻止渲染線程的快速執行。而且將渲染過程管線化,讓渲染能夠在不一樣的線程執行(渲染過程分爲不少獨立階段,每一個階段建立一個線程,利用CPU多核能力加快渲染,像流水線同樣提升併發)
網頁加載渲染過程
進程間通訊:絕大多數場景使用事件和 Chromium 新建立的任務傳遞機制,僅在非用不可的狀況下使用鎖或線程安全對象。
Content 接口不只對多進程渲染提供一層封裝,而且支持全部 HTML5 功能,GPU 硬件加速功能,沙箱機制。
WebKit2 是一套權限的結構和接口,目的同 Chromium 相似,將渲染過程放在單獨進程中完成。