2026-10-21 17:26:22
回流(Reflow)和重绘(Repaint)是浏览器渲染机制中的两个核心概念,分别对应布局计算和视觉呈现的更新过程。以下是具体解释:
1. 回流(Reflow)元素位置、尺寸、布局相关属性变化(如 width、height、margin、padding、display、position 等)。
DOM结构变化(如增删节点、调整顺序)。
窗口大小改变或字体大小变化(影响整体布局)。
读取某些属性(如 offsetTop、scrollWidth 等,会强制浏览器触发回流以获取最新值)。
元素非几何属性变化(如 color、background-color、visibility、border-style、outline 等)。
回流完成后,受影响元素的视觉表现需要更新时。
回流:类似“重新规划房间布局”(调整家具位置、尺寸,需测量空间)。
重绘:类似“重新粉刷墙壁”(颜色变化,无需调整家具位置)。
回流是布局引擎的工作(如计算盒模型、定位)。
重绘是绘制引擎的工作(如填充颜色、绘制边框)。
修改元素宽度 → 触发回流 + 重绘。
修改元素颜色 → 仅触发重绘。
隐藏元素(display: none)→ 触发回流(布局重新计算)。
隐藏元素(visibility: hidden)→ 仅触发重绘(空间仍保留)。
避免频繁修改样式,使用 class 批量操作。
分离读写操作(如将布局属性读取(offsetWidth)和修改分开)。
对频繁动画的元素使用 transform 或 opacity(触发GPU加速,不触发回流)。
合并外观属性修改(如通过 cssText 或 classList 一次性更新)。
使用 will-change 属性提前告知浏览器优化(但慎用,可能增加内存消耗)。