1.什么是回流
回流(reflow)指的是当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建,即渲染树需要重新计算。
也就是说,回流是指DOM的变化影响到了元素的几何属性(宽和高),浏览器会重新计算元素的几何属性,会使渲染树中受到影响的部分失效,浏览器会验证DOM树上的所有其他节点的visibility属性,因此,回流是低效的。
- 每个页面至少需要一次回流,就是在页面第一次加载的时候
2. 什么是重绘
在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程称为重绘。可以理解 在不影响 dom树的几何结构情况下的改变 就是重绘
例如:
display:none 不显示对应的元素,在文档布局中不再分配空间(回流+重绘)
visibility:hidden 隐藏对应元素,在文档布局中仍保留原来的空间(重绘)
因此我们可以得出一个结论 回流必然会出现重绘,重绘不一定会出现回流
如果回流的频率很高,CPU使用率会大大增加。一个元素的重排通常会带来一系列的反应,甚至触发整个文档的重排和重绘,性能代价是高昂的。