回流(reflow)和重绘(repaint)是浏览器渲染网页的两个重要概念,它们之间的区别主要是:
-
回流(reflow):指对网页布局以及尺寸等属性进行计算和重新布局的过程。回流的触发可能包括 DOM 元素的位置、大小、显示隐藏等样式属性的改变,或者浏览器窗口大小的调整等。回流的成本是较高的,因为它会导致整个页面的重新渲染,可能会触发其他元素的重新渲染等。
-
重绘(repaint):指根据新的样式属性,重新绘制相应的元素,但并不涉及其位置和大小等属性的计算和重新布局。重绘的触发一般是元素的某些 CSS 样式属性的改变,如颜色、文字等。
因此,对于网页性能优化来说,我们应该尽量减少回流的发生,最大程度地减小渲染成本。常用的方法包括避免频繁修改布局属性(如位置、宽高等)、使用文档碎片等技术,避免重复计算,以及合理使用 CSS3 动画等。