2023-02-27 深入瀏覽器渲染原理

1. 網(wǎng)頁解析的過程

  1. 輸入URL地址后, 下載index.html文件
  2. 解析html文件,遇到css或者js文件,再下載

2. 瀏覽器的內(nèi)核

常見的瀏覽器內(nèi)核有

  • Trident ( 三叉戟):IE展父、360安全瀏覽器橘霎、搜狗高速瀏覽器、百度瀏覽器裆甩、UC瀏覽器鲁豪;
  • Gecko( 壁虎) :Mozilla Firefox潘悼;
  • Presto(急板樂曲)-> Blink (眨眼):Opera
  • Webkit :Safari、360極速瀏覽器爬橡、搜狗高速瀏覽器治唤、移動端瀏覽器(Android、iOS)
  • Webkit -> Blink :Google Chrome糙申,Edge

經(jīng)常說的瀏覽器內(nèi)核指的是瀏覽器的排版引擎:

排版引擎(layout engine)宾添,也稱為瀏覽器引擎(browser engine)、頁面渲染引擎(rendering engine)或樣版引擎柜裸。

3. 解析引擎的工作流程

4. 渲染頁面的詳細(xì)流程

5. HTML解析過程

默認(rèn)情況下服務(wù)器會給瀏覽器返回index.html文件缕陕,所以解析HTML是所有步驟的開始:

解析HTML,會構(gòu)建DOM Tree:

6. 解析css規(guī)則

解析的html過程中疙挺,如果遇到CSS的link元素扛邑,那么會由瀏覽器負(fù)責(zé)下載對應(yīng)的CSS文件:

  • 注意:下載CSS文件是不會影響DOM的解析的;

解析出對應(yīng)的規(guī)則樹:稱之為 CSSOM(CSS Object Model铐然,CSS對象模型)蔬崩;

7. 構(gòu)建Render Tree

1. 注意一:link元素不會阻塞DOM Tree的構(gòu)建過程恶座,但是會阻塞Render Tree的構(gòu)建過程

  • 這是因?yàn)镽ender Tree在構(gòu)建時,需要對應(yīng)的CSSOM Tree沥阳;

2. 注意二:Render Tree和DOM Tree并不是一一對應(yīng)的關(guān)系跨琳,比如對于display為none的元素,壓根不會出現(xiàn)在render tree中桐罕;

8. 布局(layout)和繪制(Paint)

在渲染樹(Render Tree)上運(yùn)行布局(Layout)以計算每個節(jié)點(diǎn)的幾何體湾宙。

渲染樹會表示顯示哪些節(jié)點(diǎn)以及其他樣式,但是不表示每個節(jié)點(diǎn)的尺寸冈绊、位置等信息;

布局是確定呈現(xiàn)樹中所有節(jié)點(diǎn)的寬度埠啃、高度和位置信息死宣;

在繪制階段,瀏覽器將布局階段計算的每個frame轉(zhuǎn)為屏幕上實(shí)際的像素點(diǎn)碴开;

包括將元素的可見部分進(jìn)行繪制毅该,比如文本、顏色潦牛、邊框眶掌、陰影、替換元素(比如img)

8. 回流和重繪

8.1 理解回流reflow:(也可以稱之為重排)

第一次確定節(jié)點(diǎn)的大小和位置巴碗,稱之為布局(layout)朴爬。

之后對節(jié)點(diǎn)的大小、位置修改重新計算稱之為回流橡淆。

8.2 什么情況下引起回流?

  • 比如DOM結(jié)構(gòu)發(fā)生改變(添加新的節(jié)點(diǎn)或者移除節(jié)點(diǎn))召噩;
  • 比如改變了布局(修改了width、height逸爵、padding具滴、font-size等值)
  • 比如窗口resize(修改了窗口的尺寸等)
  • 比如調(diào)用getComputedStyle方法獲取尺寸、位置信息师倔;

8.3 理解重繪repaint:

第一次渲染內(nèi)容稱之為繪制(paint)构韵。

之后重新渲染稱之為重繪。

8.4 什么情況下會引起重繪趋艘?

比如修改背景色疲恢、文字顏色、邊框顏色致稀、樣式等冈闭;

8.5 兩者的關(guān)系

回流一定會引起重繪,所以回流是一件很消耗性能的事情

8.6 避免發(fā)生回流

  1. 修改樣式時盡量一次性修改, 比如通過cssText修改抖单,比如通過添加class修改
  2. 盡量避免頻繁的操作DOM, 我們可以在一個DocumentFragment或者父元素中, 將要操作的DOM操作完成萎攒,再一次性的操作遇八;
  3. 盡量避免通過getComputedStyle獲取尺寸、位置等信息耍休;
  4. 對某些元素使用position的absolute或者fixed

9. 特殊解析 – composite合成

默認(rèn)情況下刃永,標(biāo)準(zhǔn)流中的內(nèi)容都是被繪制在同一個圖層(Layer)中的;

一些特殊的屬性羊精,會創(chuàng)建一個新的合成層( CompositingLayer )斯够,并且新的圖層可以利用GPU來加速繪制;
因?yàn)槊總€合成層都是單獨(dú)渲染的喧锦;

創(chuàng)建新圖層的常見屬性:

  • 3D transforms
  • video读规、canvas、iframe
  • opacity 動畫轉(zhuǎn)換時燃少;
  • position: fixed
  • will-change:一個實(shí)驗(yàn)性的屬性束亏,提前告訴瀏覽器元素可能發(fā)生哪些變化;
  • animation 或 transition 設(shè)置了opacity阵具、transform碍遍;

分層確實(shí)可以提高性能,但是它以內(nèi)存管理為代價阳液,因此不應(yīng)作為 web 性能優(yōu)化策略的一部分過度使用怕敬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市帘皿,隨后出現(xiàn)的幾起案子东跪,更是在濱河造成了極大的恐慌,老刑警劉巖鹰溜,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件越庇,死亡現(xiàn)場離奇詭異,居然都是意外死亡奉狈,警方通過查閱死者的電腦和手機(jī)卤唉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仁期,“玉大人桑驱,你說我怎么就攤上這事□说埃” “怎么了熬的?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赊级。 經(jīng)常有香客問我押框,道長,這世上最難降的妖魔是什么理逊? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任橡伞,我火速辦了婚禮盒揉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兑徘。我一直安慰自己刚盈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布挂脑。 她就那樣靜靜地躺著藕漱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崭闲。 梳的紋絲不亂的頭發(fā)上肋联,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音刁俭,去河邊找鬼牺蹄。 笑死,一個胖子當(dāng)著我的面吹牛薄翅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氓奈,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼翘魄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舀奶?” 一聲冷哼從身側(cè)響起暑竟,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎育勺,沒想到半個月后但荤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涧至,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年腹躁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片南蓬。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡纺非,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赘方,到底是詐尸還是另有隱情烧颖,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布窄陡,位于F島的核電站炕淮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跳夭。R本人自食惡果不足惜涂圆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一们镜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乘综,春花似錦憎账、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至九妈,卻和暖如春反砌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萌朱。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工宴树, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晶疼。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓酒贬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翠霍。 傳聞我的和親對象是個殘疾皇子锭吨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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

  • 前言 瀏覽器的內(nèi)核是指支持瀏覽器運(yùn)行的最核心的程序,分為兩個部分的寒匙,一是渲染引擎零如,另一個是JS引擎。渲染引擎在不同...
    前端三少爺閱讀 428評論 0 5
  • 一锄弱、認(rèn)識瀏覽器內(nèi)核Trident(IE)Gecko(火狐)Blink(Chrome考蕾、Opera)Webkit(Sa...
    chan7788閱讀 299評論 0 0
  • 一、瀏覽器如何渲染網(wǎng)頁 要了解瀏覽器渲染頁面的過程会宪,首先得知道一個名詞——關(guān)鍵路徑渲染肖卧。關(guān)鍵渲染路徑(Critic...
    Srtian閱讀 989評論 1 3
  • 瀏覽器如何渲染網(wǎng)頁 要了解瀏覽器渲染頁面的過程,首先得知道一個名詞——關(guān)鍵渲染路徑掸鹅。關(guān)鍵渲染路徑是指瀏覽器從最初接...
    oWSQo閱讀 32,888評論 5 74
  • 1.網(wǎng)頁的解析過程 2. 瀏覽器渲染流程 3.回流和重繪解析 4.合成和性能優(yōu)化 5.defer和async屬性 ...
    未路過閱讀 521評論 0 1