瀏覽器的工作原理
一、知識點
① 瀏覽器進行DNS查找:
網站提供的域名 查找 IP地址,根據IP找服務器
② 瀏覽器跟服務器建立連接: TCP握手機制
現在大部分的服務器連接都基於https協議的,那麼會多一步TLS握手,建立加密的隧道,保證數據不被監聽和篡改。
③ 瀏覽器發起請求(http/https)獲取服務器響應
受TCP連接的限制,最先獲取的是前14kb的數據(對網站來說就是html),再慢慢增加傳輸速度。
④ 瀏覽器渲染網頁: (五步) 關鍵渲染路徑
(一) 解析html, 構建DOM樹
DOM樹是html文檔在瀏覽器中的對象表示,可用javascript來操作。
解析是順序執行的,並且只有一個主線程解析。
默認碰到script標籤是要暫停主線程,等執行完裏面代碼再繼續解析html的。
但對於圖片 或 css文件 或設置了async / defer的js文件,則不會影響主線程,而是會異步地加載。
另外,瀏覽器有個預掃描線程,會異步下載字體,css和js,這個過程是異步的,不會影響主線程。
(二) 構建CSSOM樹
CSSOM (CSS Object Model)是CSS在瀏覽器中的對象表示。
(三) 形成渲染樹
瀏覽器從根節點開始,把CSSOM中的樣式合併到DOM中的每個節點上,形成渲染樹 (Render Tree)。
(四) 佈局
瀏覽器會根據樣式計算每個可見節點(寬高和位置等),對所有節點進行佈局和規劃。
對於圖片這類節點,如果沒有指定寬高,瀏覽器會忽略它的大小,等圖片加載完成之後,瀏覽器會重新計算受影響的節點的大小和位置,這個過程叫回流 (Reflow)。
(五) 繪製: 在第一次佈局後就執行
如果發生了迴流,瀏覽器還會發生重繪。
在繪製期間,也可能會發生組合。(渲染期間產生新圖層,如出現下面圖列舉中其一的情況)
最後,加載並執行異步的js。
二、總結
DNS查找 - URL 域名 IP 服務器
建立連接 - TCP握手 TLS握手
發起請求獲取服務器響應 - 14kb
渲染網頁: 關鍵渲染路徑(3顆樹 佈局 繪製)