簡述瀏覽器渲染

前端設(shè)計工程師重在設(shè)計網(wǎng)站,只有了解了瀏覽器的渲染方式,才能在發(fā)現(xiàn)問題的同時更好的定位,便于網(wǎng)站的優(yōu)化。

瀏覽器工作的大致流程

如圖:

image.png

根據(jù)上圖,簡單的分析一下:
1、瀏覽器會解析三個東西:

a. HTML/SVG/XHTML,Webkit有三個C++的類對應(yīng)這三類文檔,解析這三種文件會產(chǎn)生一個DOM Tree。
b. CSS 解析CSS會產(chǎn)生CSS Rule Tree。
c. JavaScript,腳本,主要是通過DOM API和CSSOM API來操作DOM Tree和CSS Rule Tree。

2、解析完成后,瀏覽器引擎會通過DOM Tree 和 CSS Rule Tree 來構(gòu)造 Rendering Tree。

a. Rendering Tree 渲染樹并不等同于DOM樹,因為一些像Header或display:none的東西就沒必要放在渲染樹中了。
b. CSS 的 Rule Tree主要是為了完成匹配并把CSS Rule附加上Rendering Tree上的每個Element。也就是DOM結(jié)點。也就是所謂的Frame。
c. 然后,計算每個Frame(也就是每個Element)的位置,這又叫l(wèi)ayout和reflow過程。

3、最后通過調(diào)用操作系統(tǒng)Native GUI的API繪制。

渲染

流程:

  1. 計算CSS樣式
  2. 構(gòu)建Render Tree
  3. Layout-定位坐標和大小,是否換行,或者其他屬性
  4. 繪畫

Reflow和Repaint

當(dāng)JS修改了CSS屬性,或者手動修改的CSS屬性導(dǎo)致layout時,涉及到兩個概念,Reflow和Repaint。

Repaint:屏幕的一部分要重畫,比如某個CSS的背景色變了。但是元素的幾何尺寸沒有變。
Reflow:意味著元件的幾何尺寸變了,我們需要重新驗證并計算Render Tree。是Render Tree的一部分或全部發(fā)生了變化。這就是Reflow,或是Layout。(HTML使用的是flow based layout,也就是流式布局,所以,如果某元件的幾何尺寸發(fā)生了變化,需要重新布局,也就叫reflow)reflow 會從<html>這個root frame開始遞歸往下,依次計算所有的結(jié)點幾何尺寸和位置,在reflow過程中,可能會增加一些frame,比如一個文本字符串必需被包裝起來。

顯然,Reflow的成本比Repaint的成本要高得多。下面列舉一些高成本的動作:

a. 當(dāng)增加、刪除、修改DOM結(jié)點時,會導(dǎo)致Reflow或Repaint
b. 當(dāng)移動DOM的位置,或是搞個動畫的時候。
c. 當(dāng)修改CSS樣式的時候。
d. 當(dāng)Resize窗口的時候(移動端沒有這個問題),或是滾動的時候。
e. 當(dāng)修改網(wǎng)頁的默認字體時。

基本上,Reflow的原因如下:

a. Initial。網(wǎng)頁初始化的時候。
b. Incremental。一些Javascript在操作DOM Tree時。
c. Resize。其些元件的尺寸變了。
d. StyleChange。如果CSS的屬性發(fā)生變化了。
e. Dirty。幾個Incremental的reflow發(fā)生在同一個frame的子樹上。

盡量減少Reflow的操作:

a. 不要一條一條地修改DOM的樣式。與其這樣,還不如預(yù)先定義好css的class,然后修改DOM的className。
b. 把DOM離線后修改。
c. 不要把DOM結(jié)點的屬性值放在一個循環(huán)里當(dāng)成循環(huán)里的變量。
d. 盡可能的修改層級比較低的DOM。
e. 為動畫的HTML元件使用fixed或absoult的position
f. 千萬不要使用table布局。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 互聯(lián)網(wǎng)不斷高速發(fā)展的今天,使用瀏覽器瀏覽頁面幾乎已經(jīng)變成日常必做事項了,那么你了解瀏覽器是怎么把一堆枯燥的代碼變成...
    抱著熊喵啃什么閱讀 422評論 0 0
  • 看到這個標題大家一定會想到這篇神文《How Browsers Work》,這篇文章把瀏覽器的很多細節(jié)講得很細,而且...
    光小月閱讀 825評論 0 4
  • 1)瀏覽器會解析三個東西:一個是HTML/SVG/XHTML,事實上,Webkit有三個C++的類對應(yīng)這三類文檔。...
    24_Magic閱讀 344評論 0 2
  • 首先,我們應(yīng)該知道,瀏覽器會解析三個東西: 一個是HTML/SVG/XHTML,事實上,Webkit有三個C++的...
    李博洋li閱讀 335評論 0 0
  • 首先,看一張圖片: 首先是解析:1)這是一個解析的過程,瀏覽器會解析三個東西:一個是HTML/SVG/XHTML,...
    osborne閱讀 415評論 0 0

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