首页/开发/代码质量与评审速查/评审检查项:性能
代码评审64 条

评审检查项:性能

性能评审:关注热路径上的分配与 IO、循环内查询(N+1)、缓存与失效策略、以及复杂度的量级变化,而非常数级微调。

性能评审看什么

评审里的性能检查关注量级问题,而不是常数级微调:热路径上有没有循环内查询或网络调用、复杂度是否从线性变成平方、缓存是否定义了失效策略、能否把逐条操作改成批量。判断依据最好是基准或压测数据,凭直觉互相说服通常效率很低。

基本信息

关注重点热路径 IO、循环内调用、复杂度量级、缓存策略
证据要求改动前后的基准或压测数据,而不是印象
优先顺序先看调用次数与复杂度,再谈常数级优化
适用场景接口响应、批处理任务、数据库访问密集的改动

逐项看什么

  • 热路径:循环内的 IO、网络调用、逐条查询这类模式。
  • 复杂度量级:是否把原本线性的逻辑改成了平方级。
  • 缓存:新增缓存是否定义了失效与一致性策略。
  • 批量化:能否合并请求,用批量写入替代逐条写。
  • 数据量假设:代码是否假设了固定的小规模数据集。
  • 循环内的字符串拼接与集合查找:数据量上升后才显现,但从写法上就能避免。
  • 对比改动前后的查询次数或请求数量:这是最容易量化、也最不容易争辩的性能信号。

常见性能问题

模式表现方向
循环内查询请求数随数据量线性增长合并查询或批量接口
循环内调用外部服务网络延迟被放大批量调用或并发但控上限
重复计算同一结果被反复求值提前计算或加局部缓存
缓存无失效数据陈旧或内存持续增长定义失效与容量上限
全量扫描随数据量增长迅速变慢加索引或改数据访问方式
评审中的性能讨论应有数据支撑:预估、基准或压测,避免凭直觉互相说服。
先问清预期数据量级:同一段代码在百条与百万条数据下的结论可能完全相反。

易错点

  • 在评审里争论常数级优化:浪费注意力,真实瓶颈常在别处。
  • 加缓存不加失效策略:短时提速换来一致性问题与脏数据。
  • 只看单次调用耗时,不看调用次数:整体影响被低估。
  • 凭直觉判断性能:没有数据时容易把注意力放在不重要的分支上。

数据来源与参考

  • 《Refactoring》(Martin Fowler)· 性能与结构权衡讨论
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌