浏覽器渲染過程:
1.解析HTML,生成DOM樹,解析CSS,生成CSSOM樹
2.将DOM樹和CSSOM樹結合,生成渲染樹(Render tree)
3.Layout(回流):根據生成的渲染樹,進行回流,得到節點的幾何資訊
4.Painting(重繪):根據渲染樹以及回流得到的節點,擷取絕對像素
5.Display:将像素發給GPU,展示在頁面上
具體詳細過程:
Web頁面運作在各種各樣的浏覽器當中,浏覽器載入、渲染頁面的速度直接影響着使用者體驗簡單地說,頁面渲染就是浏覽器将html代碼根據CSS定義的規則顯示在浏覽器視窗中的這個過程。
1. 使用者輸入網址(假設是個html頁面,并且是第一次通路),浏覽器向伺服器送出請求,伺服器傳回html檔案;
2. 浏覽器開始載入html代碼,發現<head>标簽内有一個<link>标簽引用外部CSS檔案;
3. 浏覽器又發出CSS檔案的請求,伺服器傳回這個CSS檔案;
4. 浏覽器繼續載入html中<body>部分的代碼,并且CSS檔案已經拿到手了,可以開始渲染頁面了;
5. 浏覽器在代碼中發現一個<img>标簽引用了一張圖檔,向伺服器送出請求。此時浏覽器不會等到圖檔下載下傳完,而是繼續渲染後面的代碼;
6. 伺服器傳回圖檔檔案,由于圖檔占用了一定面積,影響了後面段落的排布,是以浏覽器需要回過頭來重新渲染這部分代碼;
7. 浏覽器發現了一個包含一行Javascript代碼的<script>标簽,趕快運作它;
8. Javascript腳本執行了這條語句,它指令浏覽器隐藏掉代碼中的某個(style.display=”none”)。杯具啊,突然就少了這麼一個元素,浏覽器不得不重新渲染這部分代碼;
9. 終于等到了</html>的到來,浏覽器淚流滿面……
10. 等等,還沒完,使用者點了一下界面中的“換膚”按鈕,Javascript讓浏覽器換了一下<link>标簽的CSS路徑;
11. 浏覽器召集了在座的各位<span><ul><li>們,“大夥兒收拾收拾行李,咱得重新來過……”,浏覽器向伺服器請求了新的CSS檔案,重新渲染頁面。