如何避免回流和重绘

361 阅读1分钟

重绘(repaint):元素样式改变不影响布局

回流(reflow):当元素的尺寸、结构变化或触发某些属性时,浏览器会重新渲染页面

  • 添加或删除可见的DOM元素
  • 元素的位置变化
  • 元素的尺寸变化(包括外边距、内边框、边框大小、高度和宽度等)
  • 内容发生变化,比如文本变化或图片被另一个不同尺寸的图片所替代
  • 页面一开始渲染的时候
  • 浏览器的窗口尺寸变化

小结:添加/删除DOM、位置/尺寸/内容/窗口尺寸变化、初始渲染

CSS

避免使用table布局

将动画效果应用到position属性为absolute或fixed的元素上(因为不占用空间)

JavaScript

避免频繁操作样式,可汇总后 一次修改

尽量使用class进行样式修改

减少dom的增删次数,可使用字符串或者 documentFragment 一次性插入

极限优化时,修改样式可将其display: none后修改

避免多次触发上面提到的那些会触发回流的方法,可以的话尽量用变量存住