瀏覽器的渲染流程

  1. 解析html文件構(gòu)建dom
  2. 處理css構(gòu)建CSSOM
  3. DOMCSSOM合并為渲染樹
  4. 根據(jù)渲染樹布局,然后進(jìn)行繪制

script

在解析html時(shí)如果遇到了script標(biāo)簽,將會(huì)阻塞html的解析。如果是外部腳本,那么就需要等待獲取,以及js代碼執(zhí)行的完成,才會(huì)繼續(xù)dom樹的構(gòu)建。

由于script標(biāo)簽的阻塞,通常采用以下方式來(lái)進(jìn)行優(yōu)化

  • 放在網(wǎng)頁(yè)body標(biāo)簽?zāi)┪?/li>
  • 添加defer、async屬性使得不阻塞html的解析。雖然都會(huì)異步加載腳本,不過(guò)deferasync是有不同的:
    • defer會(huì)在文檔渲染完畢后,DOMContentLoaded事件調(diào)用前執(zhí)行。按順序執(zhí)行所有的script
    • async會(huì)在瀏覽器空閑允許的情況下執(zhí)行,并且是無(wú)序的,先加載完就先執(zhí)行

link

在解析html時(shí)如果遇到了樣式表,將會(huì)阻塞瀏覽器的渲染。直至CSSOM構(gòu)建完成。

  • css加載不會(huì)阻塞DOM樹的解析
  • css加載會(huì)阻塞DOM樹的渲染
  • css加載會(huì)阻塞后邊js的執(zhí)行

回流和重繪

在頁(yè)面的渲染過(guò)程中,由于樣式和js可能會(huì)導(dǎo)致多次的渲染。也就涉及到了回流和重繪。

  • 回流:當(dāng)render tree 的一部分或全部的元素因改變了自身的寬高,布局,顯示或隱藏,或者元素內(nèi)部的文字結(jié)構(gòu)發(fā)生變化 導(dǎo)致需要重新構(gòu)建頁(yè)面的時(shí)候,就造成了回流
  • 重繪:當(dāng)一個(gè)元素自身的寬高,布局,及顯示或隱藏沒(méi)有改變,而只是改變了元素的外觀風(fēng)格的時(shí)候,就造成了重繪

回流必定觸發(fā)重繪,重繪不一定觸發(fā)回流

觸發(fā)回流的屬性:

  • 盒模型相關(guān)屬性:width height padding margin display border-width border min-height
  • 定位屬性及浮動(dòng):top left bottom right position float clear
  • 內(nèi)部文件結(jié)構(gòu)的改變等:text-align overflow-y font-weight overflow font-family line-height vertival-align white-space font-size
    觸發(fā)重繪的屬性:
  • color border-style border-radius visibility text-decoration background outline box-shadow

優(yōu)化:

  • transform 代替top left margin-top margin-left等屬性
  • 使用className 代替js操作多條樣式
  • 盡量不使用table布局
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 發(fā)送 & 接收信息 數(shù)據(jù)是以“數(shù)據(jù)包”的形式通過(guò)互聯(lián)網(wǎng)發(fā)送,而數(shù)據(jù)包以字節(jié)為單位。當(dāng)你編寫一些 HTML、CSS ...
    IT界中小PQ閱讀 432評(píng)論 0 0
  • 前言 瀏覽器的內(nèi)核是指支持瀏覽器運(yùn)行的最核心的程序,分為兩個(gè)部分的,一是渲染引擎,另一個(gè)是JS引擎。渲染引擎在不同...
    浪里行舟閱讀 1,628評(píng)論 0 13
  • 作者: 前端工匠 公號(hào) / 浪里行舟 (本文來(lái)自作者投稿) 前言 瀏覽器的內(nèi)核是指支持瀏覽器運(yùn)行的最核心的程序,分...
    一個(gè)敲代碼的前端妹子閱讀 774評(píng)論 1 5
  • 發(fā)送 & 接收信息 數(shù)據(jù)是以“數(shù)據(jù)包”的形式通過(guò)互聯(lián)網(wǎng)發(fā)送,而數(shù)據(jù)包以字節(jié)為單位。當(dāng)你編寫一些 HTML、CSS ...
    mongofeng閱讀 1,101評(píng)論 0 0
  • 蔥茂的枝葉欲上晴空,仿佛要直插進(jìn)白云里面。樸實(shí)的樹干表面干裂的樹片如魚的鱗片般一片接一片。延伸到每一節(jié)伸出的枝,枝...
    冰玲_7387閱讀 1,764評(píng)論 1 2

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