瀏覽器渲染的過程

在討論頁面渲染性能的時候,常常會聽到這幾個詞「重繪」 「迴流」 「重排」。
迴流和重排都是 Reflow的不一樣翻譯(叫法)
重繪對應Repaint,從新繪製的意思。css

webkit瀏覽器的渲染過程
html

Gecko(firefox)瀏覽器的渲染過程
web

從圖上能夠看出來咱們熟知的Reflow的說法源於ff,webkit這個過程稱之爲layout(計算佈局),意思大概差很少吧。算法

瀏覽器的工做大體流程
shell

從這個過程當中能夠了解到瀏覽器渲染主要有這麼幾步瀏覽器

  1. 解析HTML/XHTML/SVG 生成DOM tree,解析CSS生成CSS rule tree,解析script腳本dom

  2. 瀏覽器引擎經過DOM tree和css rule tree來構造render tree佈局

  3. 調用系統的GUI繪圖性能

幾個值得關注的點:spa

  1. render tree不徹底包含dom tree的內容,head或者display:none的元素不會出如今render tree中

  2. reflow/layout

  3. reflow/layout一定會repaintrepaint不必定會reflow/layout

  4. css rule tree的生成過程

  5. Repaint——屏幕的一部分要重畫,好比某個CSS的背景色變了。可是元素的幾何尺寸沒有變。
    Reflow——意味着元件的幾何尺寸變了,咱們須要從新驗證並計算Render Tree。是Render Tree的一部分或所有發生了變化。這就是Reflow,或是Layout。(HTML使用的是flow based layout,也就是流式佈局,因此,若是某元件的幾何尺寸發生了變化,須要從新佈局,也就叫reflow)reflow 會從<html>這個root frame開始遞歸往下,依次計算全部的結點幾何尺寸和位置,在reflow過程當中,可能會增長一些frame,好比一個文本字符串必需被包裝起來。

參考:
how browsers work
瀏覽器渲染原理簡介

若是對這塊知識感興趣的話,建議去讀下how browsers work這篇文章,比較長,講的很細緻,好比Gecko和webkit在渲染上的一些差別,生成樹(dom tree/css render tree)的一些具體算法什麼的。

相關文章
相關標籤/搜索