性能评审看什么
评审里的性能检查关注量级问题,而不是常数级微调:热路径上有没有循环内查询或网络调用、复杂度是否从线性变成平方、缓存是否定义了失效策略、能否把逐条操作改成批量。判断依据最好是基准或压测数据,凭直觉互相说服通常效率很低。
基本信息
| 关注重点 | 热路径 IO、循环内调用、复杂度量级、缓存策略 |
|---|---|
| 证据要求 | 改动前后的基准或压测数据,而不是印象 |
| 优先顺序 | 先看调用次数与复杂度,再谈常数级优化 |
| 适用场景 | 接口响应、批处理任务、数据库访问密集的改动 |
逐项看什么
- 热路径:循环内的 IO、网络调用、逐条查询这类模式。
- 复杂度量级:是否把原本线性的逻辑改成了平方级。
- 缓存:新增缓存是否定义了失效与一致性策略。
- 批量化:能否合并请求,用批量写入替代逐条写。
- 数据量假设:代码是否假设了固定的小规模数据集。
- 循环内的字符串拼接与集合查找:数据量上升后才显现,但从写法上就能避免。
- 对比改动前后的查询次数或请求数量:这是最容易量化、也最不容易争辩的性能信号。
常见性能问题
| 模式 | 表现 | 方向 |
|---|---|---|
| 循环内查询 | 请求数随数据量线性增长 | 合并查询或批量接口 |
| 循环内调用外部服务 | 网络延迟被放大 | 批量调用或并发但控上限 |
| 重复计算 | 同一结果被反复求值 | 提前计算或加局部缓存 |
| 缓存无失效 | 数据陈旧或内存持续增长 | 定义失效与容量上限 |
| 全量扫描 | 随数据量增长迅速变慢 | 加索引或改数据访问方式 |
评审中的性能讨论应有数据支撑:预估、基准或压测,避免凭直觉互相说服。
先问清预期数据量级:同一段代码在百条与百万条数据下的结论可能完全相反。