浏览器渲染流程
从字节到页面的大致过程
- 解析 HTML,生成 DOM
- 解析 CSS,生成 CSSOM
- 合并生成 Render Tree
- Layout:计算元素尺寸和位置
- Paint:把像素绘制到不同图层
- Composite:合成图层并显示到屏幕
为什么回流比重绘贵
Reflow / Layout需要重新计算元素的几何信息Repaint只是在不改变布局的前提下重新绘制像素- 回流通常会连带触发重绘,所以代价更大
前端常见触发点
- 修改元素尺寸、位置、字体大小
- 频繁读取布局信息,例如
offsetWidth、getBoundingClientRect() - 在循环里交替读写 DOM
实用优化思路
- 批量更新 DOM,减少反复读写
- 动画优先使用
transform和opacity - 对大块异步内容做懒加载和分片渲染
- 用
requestAnimationFrame组织视觉更新 - 对超大列表使用虚拟列表
现代性能指标
FCP:首次内容绘制LCP:最大内容绘制CLS:累计布局偏移INP:交互响应延迟
做页面性能优化时,建议从这些指标往回定位,而不是只盯着“包体积大小”。