898ee79c12f7fb22c2c8553980711253
iOS耗电量和性能优化的全新框架

Session 417, Improving Battery Life and Performance (MetricsKit)
作者:PunMY

App 的耗电量和性能表现是用户体验的一个重要部分,耗电量过大或是性能很差的 App 会导致糟糕的用户体验。为了改善用户体验以及延长电池寿命,在 Session 417 中,苹果推出了三项新的电量和性能监测工具,分别用于开发阶段、内测阶段、以及线上阶段。相信通过本文,你会对你的 App 接下去的耗电量和性能优化的方向,有更好的计划。

本次苹果推出的三项工具分别是:

  • XCTest Metrics (开发和测试阶段)
  • MetricsKit (内测阶段和线上阶段)
  • Xcode Metrics Organizer (线上阶段)

Session 417 中,苹果的工程师首先为我们介绍了 Metrics 能够监测的指标,以及各项指标的意义。然后,由三项新工具的负责人,依次为我们介绍了这三项新工具。下面我们进入正文。

概览

今年,苹果推出的性能指标监测工具可以分为两大类,分别是耗电量统计和性能监测。之所以要把耗电量统计单独作为一大类,是因为电量对于 iOS 而言真的十分重要。iOS 以其普遍落后的电池容量,做到超越大部分安卓设备的续航表现,很大一部分原因都归功于 iOS 优秀的电池管理和严格的后台任务管理,。

下面我们从这两大类分别介绍下它们的主要监测指标。

1.Battery Metrics

耗电量的指标可以分为几种,Metrics 可以分别进行统计,可以统计的几个耗电量大户分别是:

  • Processing
  • Location
  • Display
  • Networking
  • Accessories (蓝牙)
  • Multimedia
  • Camera

下面我们大致介绍下前四个:

Processing

CPU time, GPU time, etc.

这些指标可以来度量和理解 App 的复杂度,它们可以用来比对各个功能的算法效率,发现无效的渲染等。

Location Metrics

Cumulative usage time, bakcground time, etc.

可以用来了解定位的使用情况。

例如:

  • 定位多余的后台定位
  • 过高的定位精度

Display Metrics

Average Pixel Luminance (简称 APL,平均像素亮度,即每个像素的平均亮度)

在 X/XS 手机上,OLED 屏幕显示的 UI 的颜色直接影响到能耗。

  • 越亮的颜色 = 越高的能耗(高 APL)
  • 越暗的颜色 = 越低的能耗(低 APL)

Network Metrics

Upload and download bytes, connectivity, etc

尽可能优化网络使用,因为它是一项高能耗的任务。

例如:

  • 检查各个预期的上传/下载,看看能否推迟
  • 了解弱网络环境下的能耗情况(高耗能)

2.Performance Metrics

性能指标包括以下几项:

  • Hangs
  • Disk
  • Application Launch
  • Memory
  • Custom Intervals

苹果着重介绍了前四个。

Hang Metrics

Hang Metrics 就是我们常说的卡顿监测 ANR,它可以用来:

  • 查找哪些地方的任务可以移到后台线程
  • 利用各种 dispatches 和 queues 来减少卡顿的概率

Disk Metrics

这个指标记录的是磁盘逻辑写入,它用来度量磁盘使用情况,可以用来:

  • 定位多余的磁盘写入
  • 检查合并策略

Application Launch Metrics

可以用来度量 App 启动或恢复所消耗的时间。

  • 了解启动时的耗时因素,例如数据库加载对启动耗时的影响有多大
  • 查看启动和恢复这两种路径下的不同耗时

Memory Metrics

内存的管理很重要,它也可以影响到应用的启动速度,以及在后台时,被终止的可能性。
Memory Metrics 用于查看平均内存占用,以及峰值内存占用。它可以用来检测内存的使用情况,例如:

  • 定位难以复现的内存泄漏
  • 减少应用挂起后的平均内存占用(有助于推迟应用被终止的时间)

了解完主要的一些指标后,让我们进入正题。

1、在 XCTest 中监测性能(XCTest Metrics)

单元测试支持检测更多的性能数据。这是本 Session 推出的第一项新功能。

使用 XCTest 监测性能指标

XCTest Metrics 是开发和测试过程中用来衡量应用性能的工具。

在 Xcode 11 以前,XCTest 就支持跑性能测试,但是,我们只能通过设定一些性能指标的基准线,来进行性能方面的监测。然而,性能指标其实包含多个维度,因此今年 XCTest 增加了一些新的指标。包括:

  • CPU
  • memory
  • storage
  • clock and OSSignpost
  • custom Metrics

另外,在应用运行的过程中 Xcode 中可以查看到应用在 CPU、内存等各个子系统上的整体性能消耗。但这些信息比较粗略,如果你想深入挖掘更多性能信息,或者诊断一些复杂问题,就可以使用 Instrument。Instrument 中提供了一些性能检测的模板,用来诊断内存、响应速度、数据读写、耗电量等问题,可以更详细、更精确地展示性能数据。

XCTest 示例

以往测量一段代码的性能表现只需要在 measure 代码块中编写需要检测性能的代码:

top Created with Sketch.