重绘(repaint):元素样式改变不影响布局
回流(reflow):当元素的尺寸、结构变化或触发某些属性时,浏览器会重新渲染页面
- 添加或删除可见的DOM元素
- 元素的位置变化
- 元素的尺寸变化(包括外边距、内边框、边框大小、高度和宽度等)
- 内容发生变化,比如文本变化或图片被另一个不同尺寸的图片所替代
- 页面一开始渲染的时候
- 浏览器的窗口尺寸变化
小结:添加/删除DOM、位置/尺寸/内容/窗口尺寸变化、初始渲染
CSS
避免使用table布局
将动画效果应用到position属性为absolute或fixed的元素上(因为不占用空间)
JavaScript
避免频繁操作样式,可汇总后 一次修改
尽量使用class进行样式修改
减少dom的增删次数,可使用字符串或者 documentFragment 一次性插入
极限优化时,修改样式可将其display: none后修改
避免多次触发上面提到的那些会触发回流的方法,可以的话尽量用变量存住