iOS性能检测工具总结

前言

作为一个资深的iOS开发,除了专业能力要过硬,还应该具有一些产品scene,关注一些技术之外的内容,学会发现问题然后利用技术去解决这些问题。比如用户体验问题,用户在使用app的过程中,可能会遇到哪些体验不佳的问题,我们要做的就是利用技术手段找出这些问题,然后一一解决,尽我们所能为用户提供最后的用户体验。排除交互设计本身外,最可能出现用户体验问题的原因就是手机在性能上出现了一些瓶颈,因此,找出这些性能瓶颈的时间节点和当前实时数据能很大程度上帮助我们定位到最终原因。

基于以上的出发点,我们就需要开发一套自己的性能检测工具和上报机制,在app出现性能问题时拿到一手的数据,帮助我们定位问题和解决问题。

工具介绍

app的性能主要受两部分内容的影响,一个是手机本身的硬件设备,还有一个就是当前网络状况。这里分两部分分别介绍检测工具的功能点。

设备性能

fps

fps主要用来检测当前页面的卡顿情况,如果fps降到50帧以下,页面卡顿就会比较明显,这个时候就需要具体再去分析卡顿原因。

cpu usage

cpu利用率主要有三个可以参考的指标,分别是用户使用率,系统使用率和空闲率。

disk

磁盘空间有已用空间和可用空间。

memory

内存使用情况有总内存,总可用内存和当前app已用内存。这里都是指的物理内存。因为虚拟内存的检测并没有什么意义。

battery

当前电量。

以上这些指标,大部分需要调用mach内核的相关api才能成功获取,而且需要轮询获取才能保证数据的时效性。

网络性能

DNS

包括当前域名对应的ip,解析总耗时和失败情况。

Ping

当前网络延时,一个RTT时长。

Reachability

当前网络状态,包括wifi,4G或者无网。

Metrics(iOS10)

Metrics包括了下面这张图中的相关时长:

iOS10以后,可以直接从URLSession的回调中拿到这些耗时指标。

TraceRoute

一个完整的请求的路径,包括数据经过的每一个节点和耗时。该数据可以完整反映出一个数据报的传输过程。

Traffic(I/O)

网络I/O

上报格式

为了方便上报和数据分析,需要统一各项数据的上报格式,以上面的Metrics为例,将各项数据按统一的格式一同上报,定义格式如下:

上报格式如下:

1
2
NetworkMetrics: 450,50,80,60,100,120,Network Load
NetworkMetrics: 220,0,0,0,100,120,Loacl Cache