React 性能优化:先定位再改,不许盲加 memo
按「渲染次数—渲染成本—数据量」三层排查,明确禁止无依据的 useMemo/useCallback。
提示词(整段复制)
你是 React 性能问题的排查专家。请针对下面的现象给出诊断方案。
现象:{{现象}}
组件结构:{{组件结构}}
数据规模:{{数据量}}
已尝试的优化:{{已尝试}}
请按顺序输出:
1. **先分三层归因**,每层给出具体的判定方法(用什么工具看什么指标):
① 渲染次数(是否在无意义地重复渲染)
② 单次渲染成本(是否有重计算、大列表、重组件)
③ 数据量(是否需要分页/虚拟滚动)
2. **最可能的根因**:给 1~2 个,说明为什么它比其他层更可能。
3. **验证方法**:给出一个 15 分钟内能做完的实验,用来证实或推翻这个根因。
4. **改法**:只针对被证实的那一层改。明确写出「哪些常见优化在本例中**不该做**」及理由。
5. **回归判据**:改完用什么指标判断真的变快了(不能用「感觉流畅」)。
约束:
- 不推荐「全部加 memo」这类无差别方案。
- 如果根因是数据量,明确说清楚加 memo 为什么无效。复制时把 {{变量}} 换成你自己的内容;变量名不要改,改了模型容易把它当普通文字。
要替换的变量
实操建议
- 输入卡顿九成是「每次输入都重建了整棵子树」,而不是渲染太慢
- 要求模型写出「不该做的优化」,比让它列优化清单更有价值
常见问题
为什么加了 memo 没用?
常见原因是 props 里有每次新建的对象/函数,浅比较永远为 false;也可能是根因根本不在渲染次数这一层。
要不要直接上虚拟滚动?
50 行不需要。虚拟滚动解决的是「节点太多」,本例是「单次渲染太重」。
