重排(回流)
当渲染树的一部分(或全部分)因为元素的规模尺寸,布局,隐藏等改变而需要重建构建时,就会产生重排。
每个页面至少会产生一次重排,发生在页面第一次加载时。
产生一些原因:
1.页面第一次渲染:页面第一次渲染时所有的组件都需要首次布局,这是第一次产生重排,也是必会产生的重排,也是浏览器性能消耗最大的一次重排。
2.窗口尺寸改变 。
3.元素的位置,尺寸发生改变时。
4.新增和删除可见元素
5.内容发生改变(文字的数量,图片大小等等)
6.激活css伪类和设置属性
重绘
在重排时浏览器会使渲染树中受到影响的部分失效,并重新构建这个部分渲染树,完成重排后,浏览器会重新绘制受影响的部分到浏览器中,该过程称为重绘。
产生一些原因:
1.当渲染树中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格而不会影响布局时
二者联系
重排必将引起重绘,而重绘不一定会引起重排。重排会导致渲染树需要重新计算,开销比重绘大,所以尽量避免重排产生。
减少重排
1.对样式集中改变:改变一个元素的样式过多时尽量添加,修改类名来达到修改样式的结果
减少使用,el.style... = .... 这样的方式改变样式。
2.缓存信息:需要多次使用的数据用变量保存起来,例如 循环一个数组时 尽量将数组的长度保存在一个变量里。