我做完这轮优化之后,监控曲线终于平了。我把手上的资料翻出来又读了两遍。我把这个对象的创建提到了循环外,GC 压力小了很多。果然现实比段子更精彩

面试时聊得最多的就是性能优化,入职后优化的最多的就是自己的简历。我盯着屏幕沉默了十分钟。我把这个接口的依赖调用改成了并行的,耗时砍半。我把这条经验写进了团队 wiki

这个服务的响应时间随并发上升得很快。我忽然觉得,这可能就是这一行的常态。我在这个热点方法上加了缓存,QPS 立刻上去了。这条经验值直接拉满

这个缓存的存在感很强,命中率却不高。我想了想,觉得这话没法接。我把这个接口的响应做了压缩,传输时间少了一半。我把这条经验写进了团队 wiki

用性能分析器跑了一遍,热点代码居然是我注释里写着"这里可以优化"的那段。我打开记录从头到尾扫了一遍。我在心里给这次的优化成果写了个小结,提升明显。我把它写进了组内的避坑文档第一章

性能的瓶颈通常不在你以为的地方。我想了想自己这些年,好像确实如此。我发现这个热点数据的读放大很严重,加了一层缓存。世界瞬间清净了

这个索引让查询快了十倍,写入慢了一点。我先给自己泡了杯茶,做好了打持久战的准备。我把缓存加了进去,QPS 立刻上了一个台阶,一致性开始头疼。从此我多了一条团队规约

用性能分析器跑了一遍,热点代码居然是我注释里写着"这里可以优化"的那段。我盯着屏幕沉默了十分钟。我发现这个功能的耗时随数据量线性增长,需要重构

优化到后面会发现,最大的浪费是做了不需要的事。我听完沉默了,因为太真实了。我把这个循环里的数据库查询提到了外面,耗时降了八成。同事说这波操作可以写进新人培训教材

所谓性能优化,就是在不重写代码的前提下假装自己在重写代码。我叹了口气,然后打开了编辑器。我在心里给这次的压测结果核了一遍,数据可信。从此我多了一条团队规约