推荐答案
重排 (Reflow)
重排是指浏览器重新计算元素的几何属性(如位置、大小等),并重新构建页面的布局。重排通常发生在元素的尺寸、位置、内容或结构发生变化时。
重绘 (Repaint)
重绘是指浏览器重新绘制屏幕上受影响的部分,但不改变元素的几何属性。重绘通常发生在元素的视觉样式(如颜色、背景等)发生变化时。
区别
- 重排:涉及布局的重新计算,通常会导致性能开销较大。
- 重绘:仅涉及视觉样式的重新绘制,性能开销相对较小。
触发重排的操作
- 添加或删除可见的DOM元素。
- 元素尺寸、位置、内容发生变化。
- 页面初始化。
- 浏览器窗口大小改变。
- 激活CSS伪类(如
:hover
)。 - 计算
offsetWidth
、offsetHeight
等属性。
触发重绘的操作
- 改变元素的颜色、背景、边框等视觉样式。
- 改变元素的透明度。
- 改变元素的
visibility
属性。
本题详细解读
重排 (Reflow) 的详细解释
重排是浏览器为了重新计算页面布局而进行的过程。当元素的几何属性发生变化时,浏览器需要重新计算这些元素的位置和大小,并重新构建页面的布局树(Render Tree)。这个过程可能会影响到其他元素的布局,因此性能开销较大。
重绘 (Repaint) 的详细解释
重绘是浏览器为了更新屏幕上受影响的部分而进行的过程。当元素的视觉样式发生变化时,浏览器会重新绘制这些元素,但不会改变它们的几何属性。重绘的性能开销相对较小,因为它不涉及布局的重新计算。
触发重排和重绘的常见操作
- 重排:改变元素的宽度、高度、位置、内容等。
- 重绘:改变元素的颜色、背景、边框等视觉样式。
性能优化建议
- 尽量减少重排和重绘的次数,可以通过批量修改样式或使用
requestAnimationFrame
来优化。 - 使用
transform
和opacity
等属性来实现动画,这些属性不会触发重排。 - 避免频繁读取布局属性(如
offsetWidth
、offsetHeight
),因为这些操作会强制浏览器进行重排。