(我的blog遷移文章。)javascript
前言:css
頁面設計中,不可避免的須要瀏覽器進行repaint和reflow。那到底什麼是repaint和reflow呢。下面談談本身對repaint和reflow的理解,以及結合其餘技術牛的講解,談談如何優化repaint和reflow。java
初步介紹:web
開發一個頁面時,不可避免的須要進行repaint和reflow。也就只有古來的靜態頁面纔會不存在repaint和reflow。repaint主要是針對某一個DOM元素進行的重繪,reflow則是迴流,針對整個頁面的重排。字面意思來講:repaint就是重繪,reflow就是迴流。repaint和reflow的目的是:展現一個新的頁面樣貌。express
嚴重性:瀏覽器
在性能優先的前提下,性能消耗 reflow大於repaint。app
體現:dom
repaint是某個DOM元素進行重繪;reflow是整個頁面進行重排,也就是頁面全部DOM元素渲染。ide
如何觸發:wordpress
style變更形成repaint和reflow。
不涉及任何DOM元素的排版問題的變更爲repaint,例如元素的color/text-align/text-decoration等等屬性的變更。
除上面所提到的DOM元素style的修改基本爲reflow。例如元素的任何涉及長、寬、行高、邊框、display等style的修改。
常見觸發場景:
如何避免:
說避免那是不可能的,否則就是之前古老的靜態頁面了,沒有交互,那在如今看來,就是一個失敗的做品。因此,在咱們進行網頁設計的時候,就必須儘可能減小頁面的repaint和reflow。repaint和reflow的目的是爲了展現一個新的頁面,那麼咱們在進行頁面交互時,儘可能經過各類方法減小repaint和reflow但又能展現一個新的頁面的目的。因此下面將結合其餘技術達人的建議,經過本身的理解,給你們講解如何避免和優化repaint和reflow:
下面是大神Nicole Sullivan的原話:
- Change classes on the element you wish to style (as low in the dom tree as possible)
- Avoid setting multiple inline styles
- Apply animations to elements that are position fixed or absolute
- Trade smoothness for speed
- Avoid tables for layout
- Avoid JavaScript expressions in the CSS (IE only)
參考文獻:
以爲有用,點個贊,贊贊更健康。