iOS 卡顿定位分析

764 阅读2分钟

性能优化是一个棘手的问题。大多数的瓶颈是反直觉的。如果没有合适的度量,找出拖慢 app 的原因是非常困难的。到底要怎样优化你的 app 的性能呢?

卡顿产生的原因:

  • CPU 资源消耗原因
  • GPU 资源消耗原因

关于CPU,不再赘述。可以通过上述CPU工具前往卡顿的页面进行判断,如果CPU占比低,可以排除是CPU资源消耗引起的卡顿,这里主要介绍GPU。

在介绍有关卡顿instruments工具使用之前,先介绍通过代码怎么实现GPU的实施监测。

分析界面性能问题的步骤

1)定位帧率,为了给用户流畅的感受,我们需要保持帧率在60帧左右。当遇到问题后,我们首先检查一下帧率是否保持在60帧。

2)定位瓶颈,究竟是CPU还是GPU。我们希望占用率越少越好,一是为了流畅性,二也节省了电力。

3)检查有没有做无必要的CPU渲染,例如有些地方我们重写了drawRect,而其实是我们不需要也不应该的。我们希望GPU负责更多的工作。

4)检查有没有过多的offscreen渲染,这会耗费GPU的资源,像前面已经分析的到的。offscreen 渲染会导致GPU需要不断地onScreen和offscreen进行上下文切换。我们希望有更少的offscreen渲染。

5)检查我们有无过多的Blending,GPU渲染一个不透明的图层更省资源。

6)检查图片的格式是否为常用格式,大小是否正常。如果一个图片格式不被GPU所支持,则只能通过CPU来渲染。一般我们在iOS开发中都应该用PNG格式,之前阅读过的一些资料也有指出苹果特意为PNG格式做了渲染和压缩算法上的优化。

7)检查是否有耗费资源多的View或效果。我们需要合理有节制的使用。例如,UIBlurEffect。

8)最后,我们需要检查在我们View层级中是否有不正确的地方。例如有时我们不断的添加或移除View,有时就会在不经意间导致bug的发生。像我之前就遇到过不断添加View的一个低级错误。我们希望在View层级中只包含了我们想要的东西。