重绘:repaint;
回流/重排:reflow。
- 重绘:不影响任何布局的style变化。
- color、text-align、a: hover、
- 重绘的速度会明显快于回流。
- 回流:引起布局改变的style变化。
- 长/宽/高、border、display、窗口大小、字体大小、margin/padding、动画、读取元素的属性(offsetLeft等)鼠标滑过/点击/scroll。
- 有些属性是避免不了会引起回流的,但有些可以优化掉。
PS:
- 回流必定引起重绘。因为布局改变 =》相应的样式也会重新渲染
减少重绘和回流的方式:
- 不通过父级来改变子元素样式,最后直接设置子元素样式;
- 改变子元素样式尽量避免影响父元素&兄弟元素的大小尺寸。
- 使用 transform 替代 top。
- 使用 visibility 替换 display: none ,因为前者只会引起重绘,后者会引发回流(改变了布局)。
- 防抖、节流。
- 尽量避免使用table布局。
- 避免一条一条的改变DOM样式
- 给动画的 HTML 元件使用 position: fixed 或 absoult,修改他们的CSS不会 reflow,使它脱离文档流,否则会引起父元素及后续元素频繁回流。
- 使用Flexbox布局模型比基于浮动的布局模型的性能更快