重绘&回流(重排)


重绘:repaint;

回流/重排:reflow。

  • 重绘:不影响任何布局的style变化。
    • color、text-align、a: hover、
    • 重绘的速度会明显快于回流。
  • 回流:引起布局改变的style变化。
    • 长/宽/高、border、display、窗口大小、字体大小、margin/padding、动画、读取元素的属性(offsetLeft等)鼠标滑过/点击/scroll。
    • 有些属性是避免不了会引起回流的,但有些可以优化掉。

PS

  • 回流必定引起重绘。因为布局改变 =》相应的样式也会重新渲染

减少重绘和回流的方式

  1. 不通过父级来改变子元素样式,最后直接设置子元素样式;
  2. 改变子元素样式尽量避免影响父元素&兄弟元素的大小尺寸。
  3. 使用 transform 替代 top。
  4. 使用 visibility 替换 display: none ,因为前者只会引起重绘,后者会引发回流(改变了布局)。
  5. 防抖、节流。
  6. 尽量避免使用table布局。
  7. 避免一条一条的改变DOM样式
  8. 给动画的 HTML 元件使用 position: fixed 或 absoult,修改他们的CSS不会 reflow,使它脱离文档流,否则会引起父元素及后续元素频繁回流。
  9. 使用Flexbox布局模型比基于浮动的布局模型的性能更快


文章作者: polariis
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 polariis !
评论