其他分享
首页 > 其他分享> > 浅谈重绘和重排(回流)以及如何减少或避免回流

浅谈重绘和重排(回流)以及如何减少或避免回流

作者:互联网

重绘和重排的概念,如何减少或避免回流

1.重绘(repaint)

屏幕的一部分要重绘。渲染树节点发生改变,但不影响该节点在页面当中的空间位置及大小。譬如某个div标签节点的背景颜色、字体颜色等等发生改变,但是该div标签节点的宽、高、内外边距并不发生变化,此时触发浏览器重绘(repaint)。

2.重排(reflow)

也有称回流,当渲染树节点发生改变,影响了节点的几何属性(如宽、高、内边距、外边距、或是float、position、display:none;等等),导致节点位置发生变化,此时触发浏览器重排(reflow),需要重新生成渲染树。譬如JS为某个p标签节点添加新的样式:“display:none;”。导致该p标签被隐藏起来,该p标签之后的所有节点位置都会发生改变。此时浏览器需要重新生成渲染树,重新布局,即重排(reflow)。

3.引起重排的原因

1、添加或者删除可见的DOM元素;
2、元素位置改变——display、float、position、overflow等等;
3、元素尺寸改变——边距、填充、边框、宽度和高度
4、内容改变——比如文本改变或者图片大小改变而引起的计算值宽度和高度改变;
5、页面渲染初始化;
6、浏览器窗口尺寸改变——resize事件发生时;

4.如何减少和避免重排

1.使用transform代替top、left,因为使用transform页面不会出现回流现象
2.不要使用table来进行布局,因为一个小改动就会导致整个table的重新布局
3.不要逐条变更DOM的样式,应封装在一个style对象中赋值给DOM的样式属性
4.避免频繁操作DOM,创建一个documentFragment,在他上面应用所有DOM操作,最后再把他添加到文档中

标签:浅谈,DOM,重绘,重排,回流,DocumentFragment,节点,reflow
来源: https://blog.csdn.net/m0_46149348/article/details/120999226