瀏覽器渲染流程

HTML的內(nèi)容由標(biāo)記和文本組成最域、也稱標(biāo)簽

CSS又稱 層疊樣式表碘举、由選擇器和屬性組成

JS 使頁面內(nèi)容動起來

渲染模塊在執(zhí)行過程中分為很多子階段抵窒、輸入的HTML經(jīng)過這些子階段归薛、輸出像素裳朋、這個處理過程稱為 渲染流水線

  1. 構(gòu)建DOM樹

    瀏覽器無法直接理解和使用html、需要先轉(zhuǎn)化為其能理解的結(jié)構(gòu) - DOM樹

    構(gòu)建dom樹的輸入是簡單的html文件窟感、經(jīng)過html解析器解析讨彼、輸出 樹狀結(jié)構(gòu)的DOM

    DOM和html的內(nèi)容基本一致、但dom是保存在內(nèi)存中的樹狀就結(jié)構(gòu)柿祈、可以通過JS直接修改

  2. 樣式計算

    是為了計算出DOM節(jié)點中每個元素的具體樣式

    1. 將CSS轉(zhuǎn)化為瀏覽器可理解的結(jié)構(gòu) stylesheets

    2. 轉(zhuǎn)換樣式表中的屬性值哈误、使其標(biāo)準(zhǔn)化 eg. 2em -> 32px blue -> rgb(0,0,255)

    3. 計算出dom樹中每個節(jié)點的具體樣式

  3. 布局計算

    計算dom樹中可見元素的幾何位置

    1. 創(chuàng)建布局樹 遍歷dom節(jié)點、將這些節(jié)點加載到布局中

    2. 布局計算 將布局運算的結(jié)果寫回布局樹

  4. 分層

    為了更方便的實現(xiàn)3D變換躏嚎、頁面滾動或者使用z-indexing做z軸排序等

    渲染引擎還需要為特定的節(jié)點生成專用圖層蜜自、并生成一棵對應(yīng)的圖層樹LayerTree

    瀏覽器的頁面其實是很多圖層重荠、這些圖層疊加后合成了最終的頁面

    并不是所有的布局樹的每個節(jié)點都包含一個圖層戈鲁、若節(jié)點無對應(yīng)圖層婆殿、則從屬于父節(jié)點的圖層

    1. 擁有層疊上下文屬性的元素會被提升為單獨的一層

    2. 需要裁剪的地方也會被創(chuàng)建為圖層

  5. 繪制

    圖層的繪制與畫畫的流程基本一致婆芦、會把一個圖層的繪制拆分成很多小的繪制指令肠鲫、然后將指令按照順序組成一個待繪制列表

  6. 柵格化

    繪制列表只是用來記錄繪制順序和繪制指令的列表滩届、而實際上繪制操作是由渲染引擎中的合成線程來完成(圖層繪制列表準(zhǔn)備完成后被啼、主線程會把繪制列表提交給合成線程)

    通常泡挺、柵格化過程會使用GPU來加速生成、使用GPU生成位圖的過程叫 快速柵格化寡壮、生成的位圖保存在GPU內(nèi)存中

  7. 合成

    所有圖塊被光柵化之后、合成進程會生成一個繪制圖塊的命令悬蔽、提交給瀏覽器進程

    瀏覽器進程的viz組件、接收繪制命令繪制內(nèi)容顯示到瀏覽器

幾個概念

重排: 通過JS或者CS修改元素幾何位置禾乘、eg. 改變元素的寬始藕、高鳄虱、等會觸發(fā)重新布局拙已、解析之后的一系列子階段倍踪、這個過程就叫重排建车、需要更新完整的渲染流水線、開銷很大

重繪: eg. JS更改某些元素的背景色领斥、布局階段不會重新執(zhí)行月洛、直接進入繪制階段嚼黔、然后執(zhí)行之后的子階段、相對重排 少了布局分層階段碎节、執(zhí)行效率會高一些

直接合成階段: eg. 使用CSS的transform來實現(xiàn)動畫、可以避開重排重繪階段轴合、直接在非主線程上執(zhí)行合成動畫操作、大大提升繪制效率

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纲堵,一起剝皮案震驚了整個濱河市席函,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌营曼,老刑警劉巖狂塘,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辐赞,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門肪虎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人装畅,你說我怎么就攤上這事。” “怎么了百框?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵铐维,是天一觀的道長柬泽。 經(jīng)常有香客問我,道長嫁蛇,這世上最難降的妖魔是什么锨并? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮睬棚,結(jié)果婚禮上第煮,老公的妹妹穿的比我還像新娘。我一直安慰自己抑党,他們只是感情好包警,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著底靠,像睡著了一般害晦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暑中,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天壹瘟,我揣著相機與錄音,去河邊找鬼鳄逾。 笑死稻轨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的严衬。 我是一名探鬼主播澄者,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笆呆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粱挡?” 一聲冷哼從身側(cè)響起赠幕,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎询筏,沒想到半個月后榕堰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡嫌套,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年逆屡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踱讨。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡魏蔗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痹筛,到底是詐尸還是另有隱情莺治,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布帚稠,位于F島的核電站谣旁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滋早。R本人自食惡果不足惜榄审,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杆麸。 院中可真熱鬧搁进,春花似錦、人聲如沸角溃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽减细。三九已至匆瓜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間未蝌,已是汗流浹背驮吱。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萧吠,地道東北人左冬。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像纸型,于是被迫代替她去往敵國和親拇砰。 傳聞我的和親對象是個殘疾皇子梅忌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容