URL解析过程和浏览器渲染机制【面试必问、深入解析 下一次再也不怕面试官问这个问题】
生活随笔
收集整理的這篇文章主要介紹了
URL解析过程和浏览器渲染机制【面试必问、深入解析 下一次再也不怕面试官问这个问题】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
步驟拆分
- 網絡-請求和響應
- 緩存
- DNS解析
- 建立TCP連接(三次握手和四次揮手)
- 服務端驗證請求
- 響應文件類型(Content-Type)
- 瀏覽器-解析與渲染
- 瀏覽器進程和線程
- 構建Dom樹
- layout paint 合成顯示
詳細回答
一、緩存
二、DNS解析
三、TCP連接
四、服務端驗證請求
五、響應文件類型
六、瀏覽器的線程和進程
- 定時器線程
- 負責執行異步定時器一類的函數的線程,如 setInterval,setTimeout 等。
- 主線程依次執行代碼時,遇到定時器,會將定時器交給該線程處理,當計數完畢后, 事件觸發線程會將計數完畢的事件加入到任務隊列的尾部,等待 JS引擎線程執行。
- GUI線程
- 主要負責頁面的渲染,解析 HTML,CSS,構建 DOM 樹,布局和繪制等。
- 當頁面需要重繪或者由于某種操作引發回流時,將執行該線程。
- 該線程與JS 引擎線程互斥,當執行 JS 引擎線程時,GUI渲染線程會被掛起, 當前任務隊列為空時,JS引擎才會去執行 GUI 渲染。
- 網絡請求進程
- 主要負責異步請求一類的函數的線程,如 Promise,axios,ajax等,主線程依次執行代碼時,遇到異步請求,會將函數交給該線程處理,當監聽到狀態碼變更,如果有回調函數,時間觸發線程會將回調函數加入到任務隊列的尾部,等待 JS 引擎線程的執行。
- Js引擎線程
- 主要負責處理 JavaScript 腳本,執行代碼。
- 也主要負責執行準備好的待執行的事件,即定時器結束,或者異步請求成功并正確返回時,將依次進入任務 隊列,等待 JS 引擎線程的執行。
- 該線程與 GUI 渲染線程互斥,當 JS引擎線程執行 JavaScript 腳本時間過長, 將導致頁面渲染的阻塞。
- 事件觸發線程
- 主要負責將準備好的事件交給 JS 引擎線程執行,比如 setTimeout 定時器計數結束,ajax 等異步請求成功并觸發回調函數,或者用戶觸發點擊事件時,該線程會將整裝待發的事件依次加入到任務隊列的尾部,等待 JS 引擎線程的執行。
- 解析HTML得到Dom Tree
- 解析Css 得到Css Tree
- 合并Dom Tree和Css Tree生成Render Tree
- layout(布局) 計算每個元素的大小和位置,將元素布局到頁面正確的位置
- paint(繪制) 繪制頁面的像素信息,填充具體的樣式
- GPU將合成后的結果顯示到頁面
七、構建Dom樹的過程
構建Dom是編碼和解碼的過程,主要經過一下幾個環節
- 編碼: 將html原始字節內容轉換為指定的編碼內容
- 令牌化: 每一個標簽都是一個令牌,內部保存自己的規則,令牌記錄了標簽的開始和結束,這也是判斷標簽有沒有子節點的依據
- 生成對象:每一個令牌都會生成具有屬性的對象,該對象保存該節點所攜帶的信息
- 構建完成 : 形成多個對象組成的樹形結構
注: CssTree的構建過程同理
DomTree和CssTree最終合并為RenderTree,此時瀏覽器可以進行渲染
八、layout和paint
九、回流和重繪
總結
以上是生活随笔為你收集整理的URL解析过程和浏览器渲染机制【面试必问、深入解析 下一次再也不怕面试官问这个问题】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows10 - 使用命令行批量修
- 下一篇: 本地图片转为网络链接(URL/HTML/