很多iOS 开发,开发过程中都会面临到解决App卡顿问题,从而也衍生出很多的方法去解决卡顿,这篇文章来描述下iOS卡顿产生的原因,以及如何进行iOS卡顿检测分析。
了解iOS卡顿原理
像素是如何显示到屏幕上?
从最初的电子枪显示器说起,电子枪逐行读取像素点,逐行发射到屏幕上,每当一行扫描完成,显示器会发出水平同步信号HSync;然后继续下一行,直到最后一行完成一帧的绘制,电子枪恢复到起点继续下一帧的绘制,显示器会发出一个垂直同步信号VSync。对于iOS设备,VSync信号的间隔是16.7ms,也就是1秒60帧。
实际绘制过程中:
1.由CPU 计算好显示的内容:如视图的创建,布局的计算,图片的解码,文本的绘制,
2.然后GPU完成渲染,得到最终的像素,像素会输出到帧缓存(Frame Buffer)中
3.Video Controller (视频控制器)发出垂直信号(每16.67ms读取一次)进行读取Frame Buffer
4.最终输出到Monitor(显示器)上面。
假设只有一个Frame Buffer,意味着GPU和CPU必须在VSync发出的瞬间完成前面所有的工作,否则在视频控制器显示的过程中修改Frame Buffer,那么显示器就会在这一帧的前半部分显示上一帧的内容,下半部分显示当前帧的内容,造成画面断层的怪异现象。为了解决这个问题,大多数平台都引入了多缓存机制,比如iOS平台的双缓存, Android平台的三缓存机制;
因为苹果使用双缓冲区,根据上图,当垂直信号过来之后,但是GPU还没有渲染完成,就会出现掉帧(卡顿)显现。
iOS卡顿检测分析
市面上的iOS卡顿分析方案有三种:监控FPS、监控RunLoop、ping主线程。这里就不在赘述了,下图总结方便大家了解一下。
上文我们从理论层面上了解了检测iOS卡顿的方法,但在实际操作中对开发人员来说可是个不小的工程,在此,我推荐使用第三方性能检测工具友盟+U-APM来检测卡顿原因,只需要简单的集成方式,就可以对App进行全方位检测,友盟+U-APM中的卡顿分析是通过U-APM提供的监控SDK 捕获所监控App主线程消息执行超时的情况,可以帮助您优化用户使用体验、用户反馈问题是否与卡顿现象间接引发有关。
您可以在此页面查看不同时间段、筛选维度下的卡顿数据趋势,默认展示全部维度、今天的数据,您可以根据自己的查询条件进行筛选;其中的卡顿次数、卡顿率、卡顿用户数、卡顿用户占比都可一目了然。
可以在此列表中查看筛选维度+时间范围内,所有卡顿问题根据日志根据算法聚合后的错误列表,默认按照卡顿次数降序展示,帮助您快速的找到卡顿次数最多、影响最严重的卡顿问题。当然您也可以选择按照影响人数排行,找到影响面积最大的卡顿问题。
点击问题列表可查看日志详情,在这里便可以看到问题发生的位置了。
最后,友盟+U-APM的卡顿分析工具,大家可以放心使用,如果有不明白的小伙伴可以登录友盟官网体验。