第2篇 性能优化方法论

第2章 度量

过早优化会让我们把97%的时间都花在细枝末节的优化上,而放弃关键的3%。例如,花费大量时间纠结用for还是forEach更快,或者努力优化一个在实际运行中基本不耗费时间的函数的复杂度。这么做并不会为用户带来任何实质性的体验改变,反而会让我们无暇解决真正影响用户体验的问题,更糟糕的是,还会为了这种并没有实际回报的“优化”破坏代码的可读性和可维护性。

那是不是早期不需要考虑任何性能方面的问题,只要后期进行优化就能达到预期目标,即“先污染再治理”呢?显然,也不是这样的。早期良好的设计可以规避难以解决的性能问题,事实上,在本书后面诸多系统的介绍中也可以看到,很多为性能考虑的前期设计在性能上的优势远超在错误的设计上修修补补。

其实,笔者认为优化是否合适与其是不是“早”并没有直接的联系,所以“盲目”优化是万恶之源。

无论是在项目的早期还是后期,如果对优化的成本、优化带来的收益一无所知,那么就无法识别这部分优化到底属于无关紧要的97%还是关键的3%,可以认为这种优化是盲目的,因为我们对自己的目的和实际目标的达成程度都一无所知。事实上,由于盲目优化极度依赖于开发人员的主观感受和运气,因此在大部分情况下都属于无关紧要的97%的部分。