在移动设备上开发软件,性能一直是我们最为关心的话题之一,我们作为程序员除了需要努力提高代码质量之外,及时发现和监控软件中那些造成性能低下的”罪魁祸首”也是我们神圣的职责。友盟+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实时卡顿检测和优化方案相关推荐

  1. iOS界面优化 ——卡顿检测和优化方案

    iOS界面优化 --卡顿检测和优化方案 1. 卡顿原理 2. 卡顿检测 3. 界面优化 1. 卡顿原理 卡顿,也就是掉帧.当UIView被绘制时,cpu执行drawrect,通过context将数据写 ...

  2. 视图渲染、CPU和GPU卡顿原因及其优化方案

    视图渲染过程: 1.CPU 计算好显示内容提交到 GPU 2.GPU 渲染完成后将渲染结果放入帧缓冲区 3.视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示 ...

  3. 直播卡顿问题及优化方案

    本期内容主要包括四个方面:直播链路监控.卡顿质量指标.卡顿原因分析以及推荐优化方案. 上图是我们整个直播平台的链路示意图.我们的主播在推流端,通过手机.PC或者是专业的视频拍摄设备进行推流.常规使用R ...

  4. 【转】iOS实时卡顿监控

    转自http://www.tanhao.me/code/151113.html/ 在移动设备上开发软件,性能一直是我们最为关心的话题之一,我们作为程序员除了需要努力提高代码质量之外,及时发现和监控软件 ...

  5. Android卡顿检测及优化

    前言 之前在项目中做过一些Android卡顿以及性能优化的工作,但是一直没时间总结,趁着这段时间把这部分总结一下. 卡顿 在应用开发中如果留意到log的话有时候可能会发下下面的log信息: I/Cho ...

  6. 深入解析:Android卡顿检测及优化项目实战经验总结,任君白嫖

    前言 之前在项目中做过一些Android卡顿以及性能优化的工作,但是一直没时间总结,趁着这段时间把这部分总结一下. GitHub系统教程学习地址:https://github.com/Timdk857 ...

  7. ListView流畅度翻倍!Flutter卡顿分析和优化方案

    最近因为在做Flutter中相关的性能优化,在收集很多性能数据之后发现ListView组件在一些场景下(例如加载更多)容易引起页面卡顿,看到了闲鱼的Flutter 高性能.多功能的全场景滚动容器.但奈 ...

  8. html如何使多张图片滑动不卡顿,Web端大量图片同时加载卡顿问题的优化方案

    案例 由于业务的需要,需求方需要实现一个大量图片同时加载的需求.在实现这个需求的过程中,可能会遇到很多的坑,这里小编也总结了一些优化方案,我们可以一起来看看. 具体场景 在描述如何解决问题,我们现在先 ...

  9. 【iOS开发】页面卡顿监控和优化

    转载地址:卡顿 卡顿的原因: 由上面屏幕显示的原理,采用了垂直同步机制的手机设备.如果在一个VSync 时间内,CPU 或GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示 ...

最新文章

  1. Flutter基础知识链接汇总(持续更新中)
  2. shiro与springMVC整合
  3. SpringBoot与日志slf4j使用原理
  4. (转)Spring Boot 2 (四):使用 Docker 部署 Spring Boot
  5. 得到页面中的所有链接函数
  6. Android中使用Fragment实现标题栏(不可滑动)
  7. 医疗时鲜资讯:移动医疗 or 互联网医疗 or 远程医疗?
  8. 英语二大小作文总结笔记
  9. 2019新个税如何计算
  10. 微信小程序——mock.js模拟后台交互
  11. Unity HTC vive移动定位器的开发使用
  12. “乌龙学院”的是是非非
  13. c语言字符串atoi函数,C++_C语言中一些将字符串转换为数字的函数小结,C语言atoi()函数:将字符串转换 - phpStudy...
  14. Mac下/usr目录
  15. 加密货币为什么有价值?
  16. 鸿蒙系统2.0崩溃了,集体失声?鸿蒙系统官宣后,鸿蒙系统的真实现状显现
  17. 是否对纯色背景的IDE感到乏味?那就让vscode背景变成你想要的样子
  18. FLUENT连续性方程不收敛FLUENT求解器设置
  19. electron-vue打包出错Get “https://github-production-release-asset-2e65be.s3.amazonaws.com...
  20. windows安装matplotlib方法(cmd+pycharm)+cmd不运行python命令解决方法

热门文章

  1. 7-7 韩信点兵 (10 分)
  2. Firewall 防火墙常用命令
  3. 奔向太空,我们是认真的!国产操作系统飞天记。
  4. 【操作系统】第一章 概论 冲鸭!!
  5. 鱼那么信任水,水却煮了鱼
  6. 一文搞懂Spark的Task调度器(TaskScheduler)
  7. Django——云笔记项目2
  8. 一文让你秒懂存储虚拟化
  9. ORB_VI思想框架
  10. 入职脉脉是一种什么体验?附上我的脉脉Java后端开发面经,本人已于上周成功入职!