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