1. 程式人生 > 其它 >reflow(迴流)和repaint(重繪)

reflow(迴流)和repaint(重繪)

簡要:整個在瀏覽器的渲染過程中(頁面初始化,使用者行為改變介面樣式,動畫改變介面樣式等)reflow(迴流)和repaint(重繪) 會大大影響web效能,尤其是手機頁面。因此我們在頁面設計的時候要儘量減少reflow和repaint。

什麼是reflow和repaint(原文連結:http://www.cnblogs.com/Peng2014/p/4687218.html

reflow:例如某個子元素樣式發生改變,直接影響到了其父元素以及往上追溯很多祖先元素(包括兄弟元素),這個時候瀏覽器要重新去渲染這個子元素相關聯的所有元素的過程稱為迴流。

reflow:幾乎是無法避免的。現在介面上流行的一些效果,比如樹狀目錄的摺疊、展開(實質上是元素的顯 示與隱藏)等,都將引起瀏覽器的 reflow。滑鼠滑過、點選……只要這些行為引起了頁面上某些元素的佔位面積、定位方式、邊距等屬性的變化,都會引起它內部、周圍甚至整個頁面的重新渲 染。通常我們都無法預估瀏覽器到底會 reflow 哪一部分的程式碼,它們都彼此相互影響著。

repaint:如果只是改變某個元素的背景色、文 字顏色、邊框顏色等等不影響它周圍或內部佈局的屬性,將只會引起瀏覽器 repaint(重繪)。repaint 的速度明顯快於 reflow

下面情況會導致reflow發生

1:改變視窗大小

2:改變文字大小

3:內容的改變,如使用者在輸入框中敲字

4:啟用偽類,如:hover

5:操作class屬性

6:指令碼操作DOM

7:計算offsetWidth和offsetHeight

8:設定style屬性

什麼是reflow和repaint(原文連結:http://www.cnblogs.com/Peng2014/p/4687218.html

reflow:例如某個子元素樣式發生改變,直接影響到了其父元素以及往上追溯很多祖先元素(包括兄弟元素),這個時候瀏覽器要重新去渲染這個子元素相關聯的所有元素的過程稱為迴流。

reflow:幾乎是無法避免的。現在介面上流行的一些效果,比如樹狀目錄的摺疊、展開(實質上是元素的顯 示與隱藏)等,都將引起瀏覽器的 reflow。滑鼠滑過、點選……只要這些行為引起了頁面上某些元素的佔位面積、定位方式、邊距等屬性的變化,都會引起它內部、周圍甚至整個頁面的重新渲 染。通常我們都無法預估瀏覽器到底會 reflow 哪一部分的程式碼,它們都彼此相互影響著。

repaint:如果只是改變某個元素的背景色、文 字顏色、邊框顏色等等不影響它周圍或內部佈局的屬性,將只會引起瀏覽器 repaint(重繪)。repaint 的速度明顯快於 reflow

下面情況會導致reflow發生

1:改變視窗大小

2:改變文字大小

3:內容的改變,如使用者在輸入框中敲字

4:啟用偽類,如:hover

5:操作class屬性

6:指令碼操作DOM

7:計算offsetWidth和offsetHeight

8:設定style屬性