回流(Reflow): 元素的布局发生了改变,浏览器在重新计算页面布局的过程,如元素的宽度,高度,位置等。
重绘(Repaint): 元素的样式发生了改变,如字体大小,颜色,背景颜色等,是浏览器重新绘制元素样式的过程。
区别: 回流(Reflow)耗费的性能比重绘(Repaint)高得多,因为回流是浏览器在计算元素几何和页面布局的过程,而重绘是浏览器重新绘制元素样式的过程,不需要去考虑页面布局。
如何避免性能消耗过多:
1.尽量使用css语言来开发页面布局与元素样式,避免使用javascript,因为css语言是运用电脑的GPU来运行的,GPU是专门处理动画的,不依赖于CPU,所以可以减轻电脑负担。
2.使元素脱离文档流,可以减少重绘,(注意不是避免),例如:position:absuolute;position:fixed;float:right/left;
3.尽量使用visibilitty:hidden代替display:none,visibility控制元素可见度,但依然占据空间,而display:none使元素脱离渲染树
4.使用translate3d(0,0,0)直接开启GPU加速
5.在控制元素平移旋转倾斜2/3D效果或者透明度时,使用transform和opacity配合,这些api只是在视觉效果上改变元素,不会引起回流