丘梓陽
2019/09/20
編譯器
解釋器
AST
ByteCode
JIT
單進程 VS 多進程架構 (Process)
早期單進程 browser 是指 browser所有功能模組 (網路,plugins,render engine等) 都跑同一個進程裡。
單進程出現的問題:
一個 browser 主進程,一個網路進程(從browser進程獨立出來),一個GPU進程(從browser進程獨立出來),多個插件進程和多個渲染進程。
多進程 browser 架構:
Browser 樣貌
browser engine
render engine
network
JS engine
UI 後端
存儲
html/css/js
經過 browser 會顯示漂亮頁面,是如何做到?
HTML:人模型 (裸體)
CSS:為這人添加服裝,打扮/化妝等
JavaScript:為這人添加一些行為讓他可以動起來,如和其他人打交道或和真人類沒區別。
如何構建DOM
如何生成CSSOM
1. HTML 解析成 DOM
2. CSS 解析成 CSSOM,計算出 DOM 節點具體樣式
3. 創建 佈局樹 (Layout Trees)
4. 分層 (Layer)
5. 繪製 (Paints)
6. 光栅 (Raster)
7. 合成 (Draw Quad)
render engine 機制相對來說比較複雜,大致分為幾個階段
備註:以上是 Chrome 渲染流程,其他 browser,會不一樣結構。
HTML 文件經過解析成 DOM
1. 為什麼需要轉換為 DOM ?
是因為 browser 沒辦法理解 html
2. DOM 是什麼 ?
DOM 是 Document Object Model
文檔物件模型
CSS 文件經過解析成 CSSOM (StyleSheets)
1. 為什麼需要轉換為 DOM ?
是因為 browser 沒辦法理解 CSS,
也是和 html一樣,會執行轉換動作。
Style Calculations
樣式計算目的是為了計算出 DOM 節點每個元素具體樣式。
大概分為三步完成:
現在我們有了 DOM 和 DOM 樹中元素樣式!
但是目前還不足於顯示頁面,
因為我們還不知 DOM 元素的幾何位置訊息。
佈局階段分為兩步:
1. 創建佈局樹
2. 佈局計算 (位置)
過程:
有了一顆完美的佈局樹 (Layout Tree),接下來就是計算出佈局樹節點幾何位置。
備註:至於佈局計算就不做解釋,因為牽涉到演算法部分太複雜。Chrome Team 會重構佈局程式為新一代:LayoutNG
1. HTML 解析成 DOM
2. CSS 解析成 CSSOM,計算出 DOM 節點具體樣式
3. 創建 佈局樹 (Layout Trees)
4. 分層/圖層 (Layer)
5. 繪製 (Paints)
6. 光栅 (Raster)
7. 合成 (Draw Quad)
顯示在頁面上流程,都是由 Render Engine 負責渲染內容在頁面上。