iOS-Developer-OCiOS Review

iOS性能检测指标

2019-02-14  本文已影响0人  JollyJerry

需求描述:

APP性能问题是造成App用户流失的罪魁祸首之一。调研的主要内容是定性APP性能的测试指标,对比目前项目中记录的数据,后续提供一些针对指标的优化方式,以供参考!

功能描述:

APP性能检测考虑方向:

APP性能检测指标…

方向 —> 指标 :

1、CPU占用率:CPU占有率过高,会影响APP的流畅性,造成卡顿及运行速度降低!
影响CPU占有率:

监控指标设置:在页面加载时监控CPU的占用率,以获取CPU的数据!相关的参数:CPU 频率CPU 最大频率CPU 最小频率

2、FPS监控/卡顿:FPS是Frames Per Second 的简称缩写,意思是每秒传输帧数,也就是我们常说的“刷新率(单位为Hz);

FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的画面就会愈流畅,FPS值越低就越卡顿,所以这个值在一定程度上可以衡量应用在图像绘制渲染处理时的性能。一般我们的APP的FPS只要保持在 50-60之间,用户体验都是比较流畅的。


屏幕显示图像的原理:


屏幕图像原理…

具体原理:https://www.jianshu.com/p/0b58ac8e315d

造成卡顿的原因:


卡顿原理…

如果在一个VSync 时间内,CPU 或GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留之前的内容不变。例如在主线程里添加了阻碍主线程去响应点击、滑动事件、以及阻碍主线程的UI绘制等的代码,都是造成卡顿的常见原因。


监控指标设置: 两种实现方案

1)、 主线程卡顿监控。通过子线程监测主线程的runLoop,判断两个状态区域之间的耗时是否达到一定阈值。-- 通过采用检测主线程每次执行消息循环的时间,当这一时间大于规定的阈值时,就记为发生了一次卡顿的方式来监控

2)、 FPS监控。要保持流畅的UI交互,App 刷新率应该当努力保持在 60fps以上。

具体参考文献:


3、启动时长监控

Xcode 提供了测量启动时长的方法:

查看以上参数分析, 影响APP启动时长参数如下:
测量pre-main详细时间…

监控指标设置:可针对以上参数监控APP,例如:对象的创建数量;及时合并动态库;监控initializer方法时长;

详细参照:如何精确度量 iOS App 的启动时间


4、耗电量监控:监控APP的电量使用情况

获取当前电量:

 UIDevice *device = [UIDevice currentDevice];
   device.batteryMonitoringEnabled = YES;
   //UIDevice返回的batteryLevel的范围在0到1之间。
   NSUInteger batteryLevel = device.batteryLevel * 100;
   //获取充电状态
   UIDeviceBatteryState state = device.batteryState;
   if (state == UIDeviceBatteryStateCharging || state == UIDeviceBatteryStateFull) {
       //正在充电和电池已满
   }

监控指标设置:APP使用时间 + 电量记录


5、内存使用监控:监控APP的内存使用情况

内存使用情况监控非常简单,但是转化成具体监控内容或指标,提高监控的精确度相对复杂,其核心是追踪对象的生命周期,查看是否有内存泄漏!查找循环引用链

1、追踪对象的生命周期
  * 单例或者被 cache 起来复用的 View 或 ViewController
  * 释放不及时的 View 或 ViewController
  * 单例或者被 cache 起来复用
  * 释放不及时
  * 真正的内存泄漏
2、查找循环引用链

监控指标设置:单例、block、对象监控

参考资料:微信开源内存监控-MLeaksFinder


6、网络状况监控:监控APP的网络使用情况

网络监控一般通过 NSURLProtocol代码注入(Hook)这两种方式来实现,由于 NSURLProtocol 作为上层接口,使用起来更为方便,因此很自然选择它作为网络监控的方案,但是 NSURLProtocol 属于 URL Loading System 体系中,应用层的协议支持有限,只支持 FTP,HTTP,HTTPS 等几个应用层协议,对于使用其他协议的流量则束手无策,所以存在一定的局限性。监控底层网络库 CFNetwork 则没有这个限制。

下面是网络采集的关键性能指标:

监控指标设置:请求时长、DNS、首包时间、响应时间、URL数量、响应码、流量大小

参考资料:iOS-Monitor-Platform


参考文献:

上一篇 下一篇

猜你喜欢

热点阅读