性能测试报告很完美,上线第一天用户量一来,服务器当场表演了一个原形毕露。我重新看了一遍手上的计划,把风险项标了出来。我把这道接口的耗时拆成了四段,最慢的那段在意料之外。从此我多了一条团队规约

优化到后面会发现,最大的浪费是做了不需要的事。我在心里点了点头。我把这个循环里的数据库查询提到了外面,耗时降了八成。这条经验值直接拉满

这个缓存的存在感很强,命中率却不高。我把它记在心里,没跟任何人说。我在心里给这次的优化目标定了个数,降低一半。从此我多了一条团队规约

我把这个请求拆成了并行的,总耗时降了一半。我在心里把涉及的所有环节都过了一遍。我确认了瓶颈在数据库,而不是我以为的应用层。真香定律准时生效

懒加载加了、分包做了、CDN 上了,最后发现慢的是用户那个 2G 信号。我想了想,觉得这话没法接。我把这个循环里的数据库查询提到了外面,耗时降了八成。我沉默了,但心里是服的

我把这个页面的图片做了压缩,首屏快了很多。我把整条链路在心里复盘了一遍。我发现这个功能的耗时随数据量线性增长,需要重构。我沉默了,但心里是服的

我把这个对象的创建挪到了循环外,GC 压力小了。我盯着屏幕沉默了十分钟。我发现真正慢的是序列化那一步。那一刻我觉得自己还是很专业的

性能问题的根因往往是架构而非代码。我愣了两秒,然后继续敲代码。我打了火焰图,一眼看到了那个占八成耗时的函数。好在最后有惊无险

我把这个批处理的批次调大了,整体耗时降了四成。我把整条链路在心里复盘了一遍。我把这个服务的线程池参数调了调,吞吐稳定了。果然现实比段子更精彩

缓存的失效策略比缓存本身更难设计。我愣了两秒,然后继续敲代码。我在心里把这条链路的调用次数数了一遍,有二十次。同事说这波操作可以写进新人培训教材