Go语言精进之路:从新手到高手的编程思想、方法和技巧(2)
上QQ阅读APP看书,第一时间看更新

第46条
为被测对象建立性能基准

著名计算机科学家、《计算机程序设计艺术》的作者高德纳曾说过:“过早优化是万恶之源。”这一名言长久以来被很多开发者奉为圭臬。而关于这句名言的解读也像“编程语言战争”一样成为程序员界的常设话题。

笔者认为之所以对这句话的解读出现“见仁见智”的情况,是因为这句话本身缺少上下文

  • 被优化的对象是什么类型的程序?
  • 优化什么?设计、性能、资源占用还是……?
  • 优化的指标是什么?

不同开发者看问题的视角不同,所处的上下文不同,得出的解读自然也不会相同。Android界开源大牛Jake Wharton就曾提出过这样一个观点:“过早的引用‘过早优化是万恶之源’是一切龟速软件之源。”

是否优化、何时优化实质上是一个决策问题,但决策不能靠直觉,要靠数据说话。借用上面名言中的句型:没有数据支撑的过早决策是万恶之源

Go语言最初被其设计者们定位为“系统级编程语言”,这说明高性能一直是Go核心团队的目标之一。很多来自动态类型语言的开发者转到Go语言显然也是为了性能(相对于动态类型语言),Gopher期望Go核心团队对Go GC的持续优化也都是出于对性能关注的表现。性能优化也是优化的一种,作为一名Go开发者,我们该如何做出是否对代码进行性能优化的决策呢?可以通过为被测对象建立性能基准的方式去获得决策是否优化的支撑数据,同时可以根据这些性能基准数据判断出对代码所做的任何更改是否对代码性能有所影响。