前言

  今年团队工作计划的一部分是性能优化,主要会涉及到内存优化,启动优化,渲染优化,卡顿优化,耗电量,网络流量优化,弱网优化等。
之前写过一篇内存优化策略的文章,大家感兴趣的话,可以看下《iOS性能优化之内存篇》。

目的

  写这篇性能优化大纲,主要是方便大家结合自己的项目,根据大纲找出适合自己实际情况的待优化项。有目的、有步骤的进行优化。
在进行性能优化前,最重要的一点需要强调一下:所有的优化要以满足业务需求为前提。

优化大纲

1,尽可能的减少app运行期间执行的任务数量

  App运行期间执行一个个的任务,会消耗手机的电量,占用cpu资源,内存资源,网络资源等,如果App执行的任务过多会增加渲染缓慢,卡顿的概率。因此在整个app运行期间能够减少app执行任务数量的优化都是有效果的,只是优化后的效果会有差异。

2,尽可能减少app单位时间内执行的任务数量

  在app运行期间执行任务总数量不变的情况下,App单位时间内执行的任务数量过多,会造成cpu,内存,网络等资源的争用。严重的还会造成手机发烫,cpu降频。出现短期性的渲染缓慢,卡顿,内存波峰概率大大增加。

3,尽可能减少在主线程执行的任务数量

  造成渲染缓慢,卡顿的主要原因是主线程队列出现拥堵,因此减少在主线程中执行任务的数量能很大概率降低主线程出现拥堵,降低出现渲染缓慢,卡顿的概率。

4,尽可能减少主线程单位时间内执行任务的数量

  在主线程执行任务数量不变的情况下,如果单位时间内主线程执行任务数量过多,极大概率出现cpu,内存利用率突增。主线程短时间内拥堵。出现短期性的卡顿,渲染缓慢的概率大大增加。

5,尽可能降低单个任务平均执行的时间消耗

平均执行的时间消耗,优化点可以从短耗时频繁调用的函数,长耗时函数进行排查优化。平均:之所以用平均这个字段主要是因为有的优化,第一次并没有有降低时间消耗,但是后续重复调用时能够降低时间消耗。这些优化对于多次调用的任务,能取得不错的优化效果。

6,结合实际业务场景,考虑cpu,内存资源,业务等待时间来达到性能最优(会存在违反上述(1~5)规则的情况)

在遵守前面(1-5)规则的前提下进行优化,能够取得不错的效果,但是也存在一些情况违反(1-5)规则,或者需要开发者根据实际场景综合考虑的情况,下面举两个例子

1)启动优化:

  为了尽快启动需要尽可能的减少非必要任务在启动阶段执行,尽可能快的执行必要任务,此时就需要提高cpu利用率,内存利用率。尽可能将任务放到非主线程去执行,尽可能降低执行单个任务的平均时间消耗。需要综合考虑(1-5)规则来实现一个最优的策略。

2)出现内存警告后的优化:

所有的优化都是为了更好地保证业务开展这个的大前提,如果持续收到内存警告,那么app很可能会crash,此时最大限度避免因为内存造成crash,成为了性能优化首要处理的任务。