每周性能技巧 #9:过了黄金期的优化
本节阅读量:本文翻译自 Abseil 官网的 Performance Tip of the Week #9: Optimizations that aren’t in the prime of their lives。
原文发布于 2019 年 7 月 11 日,作者 Chris Kennelly,更新于 2025 年 9 月 3 日。
优化并不会永远有效。随着硬件、编译器、库和工作负载变化,曾经正确的优化可能变成无效,甚至变成回退。本篇讨论为什么要重新审视旧优化。
优化会老化
很多优化依赖当时环境中的事实:
- 某个函数是热点。
- 某种数据布局更适合当时硬件。
- 编译器不能自动完成某个变换。
- 某个库实现有特定成本。
- 工作负载输入分布稳定。
几年后,这些事实可能不再成立。编译器变强、硬件缓存层次变化、基础库被重写、服务流量形态改变,都会改变优化的收益。
旧优化的成本
过时优化仍然会保留成本:
- 更复杂的代码。
- 更多配置和特殊路径。
- 更难测试和维护。
- 阻碍新优化。
- 让读者误以为某个古老假设仍然成立。
如果收益消失,剩下的就是技术债。
定期重新测量
对于重要优化,应定期在当前环境中重新测量。重新测量不一定意味着从零做完整研究,但至少要确认:
- 目标路径仍然热。
- 改动仍然改善主指标。
- 权衡仍然可接受。
- 是否有更简单的新实现。
当旧优化不再提供价值时,删除它可能本身就是优化。
让优化更容易更新
为了避免优化老化后难以移除,可以:
- 把优化封装在清晰边界内。
- 保留测试和 benchmark,说明它想保护什么。
- 避免过度配置。
- 文档化关键假设。
- 使用能代表真实工作负载的指标。
这样未来的人更容易判断它是否仍然有效。
结语
优化是一种随环境变化而老化的资产。持续测量、清晰假设和愿意删除旧代码,可以让性能工程保持健康。
本节目录