JS瀏覽器渲染原理(JS引擎)

1、瀏覽器渲染過(guò)程

瀏覽器的渲染過(guò)程共分為幾個(gè)過(guò)程:
JavaScript ——> Style ——> Layout ——> Paint ——> Composite

image.png

1.1. Layout階段

計(jì)算DOM節(jié)點(diǎn)的最終樣式,生成Layout tree,這棵樹(shù)類(lèi)似DOM樹(shù),樹(shù)中記錄了參與的頁(yè)面的布局以及樣式,節(jié)點(diǎn)的最終布局尺寸以及位置。

該階段中主要是分為2個(gè)步驟:一個(gè)是樣式計(jì)算,另外一個(gè)是生成布局對(duì)象(LayoutObject)

cssom.png
  • 瀏覽器計(jì)算樣式的步驟:
    首先瀏覽器會(huì)遍歷一遍DOM,然后在CSSOM中查找對(duì)應(yīng)元素匹配的樣式,找到對(duì)應(yīng)的元素的樣式定義的時(shí)候,接著進(jìn)行CSS選擇器優(yōu)先級(jí)排序,得到對(duì)應(yīng)元素最終計(jì)算后的樣式,以類(lèi)ComputedStyle體現(xiàn)出來(lái)。
    DOM遍歷完之后,就會(huì)得到一個(gè)新的樹(shù),就是Layout階段的Layout tree,這棵樹(shù)雖然是從DOM樹(shù)中構(gòu)建而來(lái),但并不是建立在DOM樹(shù)上,也就是Layout tree有自己的根節(jié)點(diǎn)和孩子節(jié)點(diǎn)。
1.2.Paint階段

該階段會(huì)遍歷Layout tree中的每個(gè)節(jié)點(diǎn),根據(jù)節(jié)點(diǎn)布局方式和內(nèi)容,調(diào)用節(jié)點(diǎn)的業(yè)務(wù)邏輯(比如:繪制Rect、Border、Text等),這些繪制結(jié)果以draw commands的形式保存下來(lái)。

1.3. 使用devtool查看渲染
image.png

藍(lán)色的虛線之前表示觸發(fā)了瀏覽器的DomContentLoaded事件,表示瀏覽器已經(jīng)完成了對(duì)頁(yè)面的解析工作,它對(duì)應(yīng)的Main(JS線程)在這之前完成了對(duì)HTML的解析工作,該過(guò)程也就是Parse HTML階段。

1.4、render樹(shù)

html的dom樹(shù) + css style 生成了render樹(shù)

image.png

2、V8引擎解析js代碼

在解析js代碼的過(guò)程中,主要?dú)v經(jīng)三個(gè)過(guò)程,①通過(guò)parser解析器生成AST抽象語(yǔ)法樹(shù) ②通過(guò)interpreter將AST抽象語(yǔ)法樹(shù)解析成機(jī)器能夠識(shí)別的字節(jié)碼 ③通過(guò)compiler編譯器編譯代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.瀏覽器的發(fā)展史 1992年,托尼喲翰遜(Tony Johnson)發(fā)布了Midas,它允許用戶瀏覽UNIX和V...
    不會(huì)飛的fish閱讀 704評(píng)論 0 0
  • 標(biāo)識(shí)符 所謂標(biāo)識(shí)符是指變量、函數(shù)、屬性的名字,或者函數(shù)的參數(shù)。標(biāo)識(shí)符的書(shū)寫(xiě)有幾個(gè)特征: 區(qū)分大小寫(xiě) 第一個(gè)字符必須...
    yuhuan121閱讀 1,281評(píng)論 0 1
  • 前言 瀏覽器的內(nèi)核是指支持瀏覽器運(yùn)行的最核心的程序,分為兩個(gè)部分的,一是渲染引擎,另一個(gè)是JS引擎。渲染引擎在不同...
    前端三少爺閱讀 445評(píng)論 0 5
  • 一、認(rèn)識(shí)瀏覽器內(nèi)核Trident(IE)Gecko(火狐)Blink(Chrome、Opera)Webkit(Sa...
    chan7788閱讀 357評(píng)論 0 0
  • 瀏覽器如何渲染網(wǎng)頁(yè) 要了解瀏覽器渲染頁(yè)面的過(guò)程,首先得知道一個(gè)名詞——關(guān)鍵渲染路徑。關(guān)鍵渲染路徑是指瀏覽器從最初接...
    oWSQo閱讀 33,287評(píng)論 5 74

友情鏈接更多精彩內(nèi)容