瀏覽器渲染原理

瀏覽器解析

Paste_Image.png

一.瀏覽器會解析三個東西

  1. HTML/SVG/XHTML
  2. CSS會生成CSS規(guī)則樹,
  3. javascript腳本,主要是通過DOM API和CSSOM API來操作DOM Tree和CSS Rule Tree.解析完成后,瀏覽器引擎會通過DOM Tree 和 CSS Rule Tree 來構(gòu)造 Rendering Tree

二. 注意:

  1. Rendering Tree不等同于DOM樹,因為因為一些像Header或display:none的東西就沒必要放在渲染樹中。這個在瀏覽器的工作原理里面有講地 很清楚。
  2. CSS的rule Tree醉冤,主要是為了完成匹配并把CSS Rule附加上Rendering Tree上的每個Element。也就是DOM結(jié)點篙悯。也就是所謂的Frame
  3. 計算每個FRAME的位置冤灾,這叫l(wèi)ayout和reflow
  4. 最后通過調(diào)用操作系統(tǒng)Native GUI的API繪制。

DOM解析

Paste_Image.png

解析算法由兩個階段組成:標(biāo)記化和樹構(gòu)建辕近。
構(gòu)建過程如下:

Paste_Image.png

CSS解析

  1. Firefox 規(guī)則樹
      <html>
          <body>
              <div class="err" id="div1">
                  <p> this is a <span class="big"> big error </span>
                   this is also a <span class="big"> very big error</span> error 
                  </p>
              </div>
              <div class="err" id="div2">another error</div>
         </body>
  </html>

還有如下規(guī)則

1div {margin:5px;color:black}
2.err {color:red}
3.big {margin-top:3px}
4 div span {margin-bottom:4px}
5 #div1 {color:blue}
6 #div2 {color:green}

形成的規(guī)則樹如下圖所示


Paste_Image.png
Paste_Image.png

渲染

1.流程

  1. 計算CSS樣式
  2. 構(gòu)建Render Tree
  3. Layout – 定位坐標(biāo)和大小韵吨,是否換行,各種position, overflow, z-index屬性 ……
  4. 正式開畫

![Upload Paste_Image.png failed. Please try again.]

2.Repaint和Reflow

  • Repaint——屏幕的一部分要重畫,比如某個CSS的背景色變了归粉。但是元素的幾何尺寸沒有變椿疗。
  • Reflow——意味著元件的幾何尺寸變了,我們需要重新驗證并計算Render Tree糠悼。Render Tree的一部分或全部發(fā)生了變化届榄。這就是Reflow,或是Layout倔喂。

3.做reflow的情況:

  • Initial铝条。網(wǎng)頁初始化的時候。
  • Incremental席噩。一些Javascript在操作DOM Tree時班缰。
  • Resize。其些元件的尺寸變了悼枢。
  • StyleChange埠忘。如果CSS的屬性發(fā)生變化了。
  • Dirty馒索。幾個Incremental的reflow發(fā)生在同一個frame的子樹

4.成本比較高的動作:

  • 當(dāng)你增加莹妒、刪除、修改DOM結(jié)點時绰上,會導(dǎo)致Reflow或Repaint

  • 當(dāng)你移動DOM的位置旨怠,或是搞個動畫的時候。

  • 當(dāng)你修改CSS樣式的時候蜈块。

  • 當(dāng)你Resize窗口的時候(移動端沒有這個問題)鉴腻,或是滾動的時候。

  • 當(dāng)你修改網(wǎng)頁的默認(rèn)字體時
    四減少reflow/repaint

  • 不要一條一條地修改DOM的樣式疯趟。與其這樣,還不如預(yù)先定義好css的class谋梭,然后修改DOM的className信峻。****

  • 把DOM離線后修改****
    使用documentFragment 對象在內(nèi)存里操作DOM
    先把DOM給display:none(有一次reflow),然后你想怎么改就怎么改瓮床。比如修改100次盹舞,然后再把他顯示出來。
    clone一個DOM結(jié)點到內(nèi)存里隘庄,然后想怎么改就怎么改踢步,改完后,和在線的那個的交換一下丑掺。

  • 不要把DOM結(jié)點的屬性值放在一個循環(huán)里當(dāng)成循環(huán)里的變量获印。不然這會導(dǎo)致大量地讀寫這個結(jié)點的屬性。****

  • 盡可能的修改層級比較低的DOM街州。當(dāng)然兼丰,改變層級比較底的DOM有可能會造成大面積的reflow玻孟,但是也可能影響范圍很小****

  • 為動畫的HTML元件使用fixed或absoult的position,那么修改他們的CSS是不會reflow的****

  • 千萬不要使用table布局鳍征。因為可能很小的一個小改動會造成整個table的重新布局黍翎。

主要參照
http://coolshell.cn/articles/9666.html
http://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市艳丛,隨后出現(xiàn)的幾起案子匣掸,更是在濱河造成了極大的恐慌,老刑警劉巖氮双,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碰酝,死亡現(xiàn)場離奇詭異,居然都是意外死亡眶蕉,警方通過查閱死者的電腦和手機(jī)砰粹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來造挽,“玉大人碱璃,你說我怎么就攤上這事》谷耄” “怎么了嵌器?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谐丢。 經(jīng)常有香客問我爽航,道長,這世上最難降的妖魔是什么乾忱? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任讥珍,我火速辦了婚禮,結(jié)果婚禮上窄瘟,老公的妹妹穿的比我還像新娘衷佃。我一直安慰自己,他們只是感情好蹄葱,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布氏义。 她就那樣靜靜地躺著,像睡著了一般图云。 火紅的嫁衣襯著肌膚如雪惯悠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天竣况,我揣著相機(jī)與錄音克婶,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛鸠补,可吹牛的內(nèi)容都是我干的萝风。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼紫岩,長吁一口氣:“原來是場噩夢啊……” “哼规惰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泉蝌,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤歇万,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勋陪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贪磺,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年诅愚,在試婚紗的時候發(fā)現(xiàn)自己被綠了寒锚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡违孝,死狀恐怖刹前,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雌桑,我是刑警寧澤喇喉,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站校坑,受9級特大地震影響拣技,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耍目,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一膏斤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邪驮,春花似錦莫辨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烫幕。三九已至俺抽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間较曼,已是汗流浹背磷斧。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弛饭。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓冕末,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侣颂。 傳聞我的和親對象是個殘疾皇子档桃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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