6.1 性能优化之前

在学习性能优化之前,以下几个核心点是所有开发者都需要知道的。

  • 性能优化永远是说起来容易做起来难。一定要多实践,才能积累经验,了解性能优化的方法和技巧。
  • 性能优化始终需要一个度,不可矫枉过正。各种性能优化都是建立在产品设计之上,不能为了一味地性能优化而忽视了产品设计。
  • 性能优化的点多而且繁杂,需要耐心和经验。也许每个优化点都很小,但积累起来量变一定会发生质变。

开发者对于性能优化,通常有两个极端认识,一种是觉得性能优化没有太大作用,另一种是对性能优化极其苛刻。这两种想法都是不对的,性能优化是对产品体验的优化,开发者在开发过程中应该对系统资源、程序性能做到精益求精。但同时过度的性能优化,也会花费大量的时间。因此,把握好性能优化的度是非常关键的。

性能分析与提高是一个漫长而且烦琐的过程。它不一定需要太多高深的技巧,但却一定需要很强的耐心和毅力。不论是Google还是其他的资深研究者,在性能优化方面都给开发者提供了很多开发工具,可以帮助开发者就性能的检测与分析提供很好的帮助。然而有了这些工具还不够,还需要开发者有敏锐的技术嗅觉,能够很敏锐地发现可疑问题点。那么如何锻炼这种技术嗅觉呢?笔者的建议是使用模式分析的方式来提高技术嗅觉。具体来说,就是掌握常见的性能问题在这些工具中的形态和一般模式,从工具提供的图形、走势、Log中找到对应问题的模式,从而进一步分析可疑问题。这种方式在前期可能会非常枯燥乏味,但一定要自己去建立模式与问题的对应关系,这样才能牢记于心。

性能优化所需要的工具非常多,因为在检测性能时,大部分时间都是机械、重复的操作。利用工具可以很好地简化这一过程。同时,利用工具可以极大地提高性能优化的速度。掌握好这些工具是性能优化的必经之路。使用这些工具进行性能优化、性能分析,就像医生看病前需要的检查报告。有的工具简单、普遍,就像血常规;有的工具专业性强,就像CT。不管使用什么工具都需要先了解这个工具的作用和功能,对症下药才能正确找到优化方向。

6.1 性能优化之前 - 图1还有一点需要注意的是,性能测试需要覆盖多种机型(包括分辨率、系统版本、CPU、内存、网络、Root)。同时在进行性能优化的时候,最好使用中低端机型进行测试,而且需要覆盖市场主流机型。

在有了优化的方向后,还需要对优化的优先级进行划分。例如,有些性能问题是一直都存在的,那么这些问题就必须以第一优先级进行优化。有些问题是对用户体验、业务需求造成很大影响的,那么这些问题也必须提高其优先级。把优化精力放在优先需要解决的问题上,才能最大限度地提高优化的效果。

当开发者经过几次性能分析之后,慢慢就会对性能问题有一些经验了。此时需要好好积累、总结这些经验,培养对性能问题灵敏的嗅觉。对于这些积累,笔者建议一定要通过“模式”的方式来进行积累。通过记录各种性能问题在性能检测工具中的状态、表现,建立相应的模式关系。之后只有找到有类似的“模式”就可以联想到类似的性能问题,从而快速发现、解决问题。