标准答案

  1. 先用浏览器 Performance、React DevTools Profiler 和业务指标确认问题发生在哪个交互。
  2. Profiler 能展示每次 commit 的耗时、参与渲染的组件和相对成本。
  3. 常见问题包括父组件大范围重渲染、长列表渲染、昂贵计算、Context 粒度过粗和不稳定 props。
  4. 优化手段包括状态下沉、组件拆分、memo、useMemo、useCallback、虚拟滚动和请求缓存。
  5. 优化后要复测同一交互,确认 commit 时间、渲染范围或用户感知延迟确实下降。

题目解析

这道题要强调测量优先。没有数据就加 memo,容易增加复杂度但收益很小。

Profiler 看到的是 React 渲染成本,不等于全部页面性能,还要结合网络、脚本执行、布局和绘制。

性能优化要围绕具体用户行为,例如输入卡顿、切 tab 慢、展开表格慢,而不是泛泛地减少所有重渲染。

代码示例

下面可以用 Profiler 包住高风险区域,记录实际渲染耗时。

TSX
function onRender(
  id: string,
  phase: 'mount' | 'update',
  actualDuration: number
) {
  reportMetric('react_render', { id, phase, actualDuration })
}

<Profiler id="UserTable" onRender={onRender}>
  <UserTable rows={rows} />
</Profiler>

常见误区

  • 没有性能数据就开始到处加 memo 和 useCallback。
  • 只看 React Profiler,忽略网络慢、图片大、布局抖动等非 React 问题。
  • 优化后没有复测,无法证明改动真的改善了用户体验。

作者信息