我是靠谱客的博主 寒冷大象,最近开发中收集的这篇文章主要介绍ios实时卡顿检测和优化方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在移动设备上开发软件,性能一直是我们最为关心的话题之一,我们作为程序员除了需要努力提高代码质量之外,及时发现和监控软件中那些造成性能低下的”罪魁祸首”也是我们神圣的职责。友盟+U-APM就是一款提供应用性能监控的平台,可以帮开发者快速找到应用性能缺陷,发现问题根源,并及时解决问题。

iOS平台因为UIKit本身的特性,需要将所有的UI操作都放在主线程执行,所以也造成不少程序员都习惯将一些线程安全性不确定的逻辑,以及其它线程结束后的汇总工作等等放到了主线,所以主线程中包含的这些大量计算、IO、绘制都有可能造成卡顿。

这里推荐三种ios卡顿监控的方案:

FPS监控:为了保持流程的UI交互,App的刷新应该保持在60fps左右,其原因是因为iOS设备默认的刷新频率是60次/秒,而1次刷新(即VSync信号发出)的间隔是 1000ms/60 = 16.67ms,所以如果在16.67ms内没有准备好下一帧数据,就会产生卡顿。主要通过CADIsplayLink实现。参照YYKit中的YYFPSLabel,借助link的时间差,来计算一次刷新刷新所需的时间,然后通过 刷新次数 / 时间差 得到刷新频次,并判断是否其范围,通过显示不同的文字颜色来表示卡顿严重程度。

主线程卡顿监控:通过子线程监测主线程的RunLoop,判断两个状态(kCFRunLoopBeforeSources 和 kCFRunLoopAfterWaiting)之间的耗时是否达到一定阈值。

第三方工具:OC:微信卡顿检测工具matrix,滴滴卡顿方案DoraemonKit,Swift:ANREye。

以下是界面优化方案:

预排版:尽量提前计算视图布局,例如提前算出cell的行高,缓存cell的行高来避免多次计算。

预解码 & 预渲染:

图片加载流程:

图片要显示,就要加载一个UIImage,UIImage是一个模型,里面包含Data Buffer 和 imageBuffer,然后由Controller控制UIImage显示在UIImageView上面的。

异步渲染

1、UIView 和 CALayer都是 UI 操作的对象;

2、UIView是 CALayer用于交互的对象,UIView是CALayer的delegate ,UIView是UIResponder的子类,其中提供了很多CALayer所没有的交互接口,主要负责处理用户触发的各种操作,给CALayer 提供内容;

3、CALayer主要负责绘制,在图像和动画上渲染性能更好;

4、尽量避免使用透明view,因为使用透明view,会导致在GPU中计算像素时,会将透明view下层图层的像素也计算进来,即颜色混合处理;

5、少使用addView 给cell动态添加view;

6、尽量用轻量级的对象代替重量级的对象,可以对性能有所优化,例如 不需要相应触摸事件的控件,用CALayer代替UIView;

7、尽量减少对UIView和CALayer的属性修改。CALayer内部并没有属性,当调用属性方法时,其内部是通过运行时resolveInstanceMethod为对象临时添加一个方法,并将对应属性值保存在内部的一个Dictionary中,同时还会通知delegate、创建动画等,非常耗时;

UIView相关的显示属性,例如frame、bounds、transform等,实际上都是从CALayer映射来的,对其进行调整时,消耗的资源比一般属性要大;

  1. 当有大量对象释放时,也是非常耗时的,尽量挪到后台线程去释放。

程序员可使用友盟+U-APM对ios卡顿问题进行检测,找到问题,进行优化。

U-APM应用性能监控平台,通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力, 及卡顿、启动分析、内存分析、网络分析等性能监测能力,支持多场景、多通道智能告警监测,帮助 开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。提供云真机测试能力,助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试 期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。

最后

以上就是寒冷大象为你收集整理的ios实时卡顿检测和优化方案的全部内容,希望文章能够帮你解决ios实时卡顿检测和优化方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部