Web page parsing
This is an example Web page.
```
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/8a38279a4e8546d5b5b35b6896461a92.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5byR5aSp5YC-5Z-O,size_20,color_FFFFFF,t_70,g_se,x_16)
**瀏覽器容錯進位制**
你從來沒有在瀏覽器看過類似”語法無效”的錯誤,這是因為瀏覽器去糾正錯誤的語法,然後繼續工作。
**事件**
當整個解析的過程完成以後,瀏覽器會透過 DOMContentLoaded事件來通知 DOM解析完成。
**2、CSS 解析**
一旦瀏覽器下載了 CSS,CSS 解析器就會處理它遇到的任何 CSS,根據語法規範解析出所有的 CSS 並進行標記化,然後我們得到一個規則表。
**CSS 匹配規則**
在匹配一個節點對應的 CSS 規則時,是按照從右到左的順序的,例如:div p{font-size:14px}會先尋找所有的 p標籤然後判斷它的父元素是否為 div。
所以我們寫 CSS 時,儘量用 id 和 class,千萬不要過度層疊。
**3、 渲染樹**
其實這就是一個 DOM 樹和 CSS 規則樹合併的過程。
```
注意:渲染樹會忽略那些不需要渲染的節點,比如設定了 display:none的節點。
```
**計算**
透過計算讓任何尺寸值都減少到三個可能之一:auto、百分比、px,比如把 rem轉化為 px。
**級聯**
瀏覽器需要一種方法來確定哪些樣式才真正需要應用到對應元素,所以它使用一個叫做 specificity的公式,這個公式會透過:
1、標籤名、class、id
2、是否內聯樣式
3、 !important
然後得出一個權重值,取最高的那個。
**渲染阻塞**
當遇到一個 script標籤時,DOM 構建會被暫停,直至指令碼完成執行,然後繼續構建 DOM 樹。
但如果 JS 依賴 CSS 樣式,而它還沒有被下載和構建時,瀏覽器就會延遲指令碼執行,直至 CSS Rules 被構建。
所有我們知道:
1、CSS 會阻塞 JS 執行
2、JS 會阻塞後面的 DOM 解析
**為了避免這種情況,應該以下原則:**
1、CSS 資源排在 JavaScript 資源前面
2、JS 放在 HTML 最底部,也就是