瀏覽器的渲染過程

一、瀏覽器結構

  • 用戶界面(User Interface):包括交互組件,地址欄,返回前進按鈕
  • 瀏覽器引擎(Browser engine):控制和管理下一級的渲染引擎
  • 渲染引擎(Rendering engine):解析請求內容,HTML,XML,CSS
  • 網絡(Networking):處理HTTP請求等
  • UI后端(UI backend):繪制提示框等瀏覽器組件
  • JavaScript解析器(JavaScript Interpreter):解析和執行JavaScript代碼
  • 數據存儲(Data Storage)持久化存儲,cookie,緩存

二、網絡請求過程

  1. 用戶在地址欄輸入域名,DNS(Domain Name System)域名解析服務器根據域名查找IP地址,向其發起請求
  2. 返回200響應碼,說明響應成功
  3. 瀏覽器得到并解析服務器返回的內容response
  4. 加載HTML文件,及所需js,css,image等資源

三、渲染過程(關鍵渲染路徑Critical Rendering Path)

  1. 構建DOM樹,從上到下解析HTML文檔生成DOM節點樹,也叫內容樹
  2. 構建CSSOM樹,加載解析樣式生成CSSOM樹
  3. 執行JavaScript,加載并執行JavaScript代碼
  4. 構建渲染樹Render Tree,根據DOM樹和CSSOM樹生成。按順序展示在屏幕的一系列矩陣,帶有字體,顏色,尺寸等屬性
  5. 布局Layout,根據渲染樹將節點樹的每一個節點布局在屏幕上的正確位置
  6. 繪制painting,遍歷渲染樹繪制所有節點,為每一個節點對應樣式


    rendering path

    瀏覽器會每處理一部分內容,并展現在屏幕上,所以頁面加載時是自上而下展現的

通常javascript會改變文檔DOM結構,瀏覽器以同步方式解析,加載和執行腳本,遇到<script>標簽時,會解析并立即執行直到完成,阻塞文檔的解析。所以一般建議將<script>放在<body>前,而不是<head>標簽內

而瀏覽器對樣式的解析不會阻塞文檔解析

布局Layout(或叫回流Reflow),通過渲染樹中渲染對象的信息,計算出每一個渲染對象的位置和尺寸,將其安置在瀏覽器窗口的正確位置。有時會在文檔布局完成后對DOM進行修改,就需要重新布局,稱為回流,本質上還是布局的過程

四、頁面渲染優化

  1. HTML文檔結構層次盡量少
  2. 腳本放最好在</body>前
  3. 首屏樣式內聯放在<head>內,樣式結構盡量簡單
  4. 減少DOM操作,盡量緩存訪問DOM的樣式信息
  5. 減少通過javascript代碼修改樣式,多操作class
  6. 動畫盡量使用在絕對定位或固定定位的元素上
  7. 緩存DOM查找,查找器盡量簡潔
  8. 涉及多域名的網站,可以開旗域名預解析

參考文章:前端頁面渲染機制-熊 建剛

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容