在還是 Web 新手時,一點也都不瞭解 Browser 是如何運作的?也沒在管,只覺得反正就是 IDE 開一個新的 Web 專案,就會把一些初始的 Structure 都給搞定了,例如:DTD,Basic HTML Template 等等。然後就會很容易的做出 Performance 不好的 Web。到了現在我還是對 Browser 有一些模糊的地方,但在看完 How browsers work 一文後,清楚許多。
一. Browser 的基本架構
( 來源: How browsers work 一文 )
1. User Interface:
此處指的是不包含顯示 Request page 的 Main window,其他都屬於 Browser 的 UI,例如:網址列,書籤列等等。
2. Browser Engine:
提供一個介面來詢問或操控 Rendering Engine。
3. Rendering Engine:
主要負責顯示使用者 Request 的網頁,將 Parsing 後的內容顯示出來。
4. Networking:
負責大家所熟悉的 HTTP Request 。
5. JavaScript Interpreter:
負責 Parsing 和執行 JavaScript code。
6. UI Backend:
負責提供網頁上一些基本元素的樣式,例如:ComboBox, Button 等。此樣式會依據 OS 的不同而有差異。
7. Data Stroage:
提供 Client 端資料儲存的地方,例如: Cookie, Localstroage 等。
二. 大部分解 Rendering Engine
( 來源: How browsers work 一文 )
上圖就是 Rendering Engine 的基本流程,第一步一定是要將 HTML 轉成 DOM Tree,之後再配合一些 Style information 例如: CSS,轉成 Render Tree,再來就是開始做 Layout 的動作,最後開始畫出畫面來。當然現在的 Browser 為了速度上的考量,想要盡可能的讓使用者看到畫面,所以通常都不會等到整個 Page 都準備好後才顯示出畫面,Rendering Engine 會以一部分一部分的方式來 Parse 和 Display。
三. 重要觀念
1. 我們時常會以 JavaScript 去動態更動 Style,或做一些動畫的效果,若能做到部分的更動,而非整個 Render Tree 都要更動,效能會比較好。
2. Rendering Engine 的 Thread 是 Single Thread,所以大部分的 Operation 都是在 Single Thread 下做處理的,但是 Network 的 Operation 例外,Network Operation 可以同時有多個 Thread 來進行,所以可以很常看到 Browser 在同時間發出一些 Request。
3. Box Model 的概念很重要
( 來源: How browsers work 一文 )
4. Position Scheme
原文說得很清楚
There are three schemes:
- Normal - the object is positioned according to its place in the document - this means its place in the render tree is like its place in the dom tree and layed out according to its box type and dimensions
- Float - the object is first layed out like normal flow, then moved as far left or right as possible
- Absolute - the object is put in the render tree differently than its place in the DOM tree
The positioning scheme is set by the "position" property and the "float" attribute.
- static and relative cause a normal flow
- absolute and fixed cause an absolute positioning
Box 是如何被 Layout 取決於以下幾點:
- Box type: 例如: span 是 inline, div 是 block
- Box dimensions: 例如: width, height
- Positioning scheme: 例如: float, relative, absolute等
- External information - like images size and the size of the screen
總結:
大致上我只記錄了實用的概念,文章中有提到很多細節的部分,這篇好文真的能讓人了解瀏覽器的運作原理,值得細細品嘗。
全站熱搜
留言列表