iOS性能检测和优化

卡顿原因分析

  • 用户在使用APP的过程中,客户端要在持续60fps左右的帧率情况下才能保证流畅度,低于40fps就有明显的卡顿情况;那么在什么情况下才会导致帧率下降呢?
  • 我们都知道APP需要在主线程进行渲染操作,同时还有很多业务功能需要添加,当主线程中需要许多耗时任务的情况下就会阻塞主线程从而掉帧;要保证每一帧的渲染和业务功能在16.67ms内完成不会掉帧;那么如何进行优化呢?
  • 回到系统层面,主线程耗时的操作主要是CPU和GPU耗时的总和;哪一边占用太多时间都会导致掉帧;如果某一时段CPU比较耗时,就尽量将耗时代码分离到不同的时间碎片减压,或者挪动到别的线程帮助减压;如果某一时段GPU使用比较耗时,意味着短时间内提交的纹理和顶点数据过多,应尽量优化大图资源,避免多图层资源混合,以及避免离屏渲染等情况;
  • CPU或GPU消耗原因分析参照 https://www.jianshu.com/p/b29c682679c4

性能分析工具 TimeProfile

  • Xcode自带的Instruments工具,有很多帮助分析工程项目的应用,为了直观的查看项目代码的运行耗时情况,可以使用TimeProfile帮助精准的定位问题;
  • 具体使用教程参照 https://www.jianshu.com/p/cc2d64bf511d

耗时代码整理

  • 尽量使用drawAtPoint,而不要使用drawInRect,涉及首页,我的页面中下拉刷新用的动图生成
  • AdModule,TabBarModule,ShareModule初始化占用时间过长
  • +[QRCodeTools zxingQRCodeWithString:]编码耗时过长
  • xib初始化会额外占用时间,根据页面复杂度将占用7~11ms,建议使用别的布局替代方案

渲染耗时分析

  • UI 渲染一旦出现繁重的任务就会导致界面卡顿,这类任务通常分为3类:排版,绘制,UI 对象操作, 像复杂排版的首页经常会出现这种问题。
  • 排版通常包括计算视图大小、计算文本高度、重新计算子式图的排版等操作。
  • 绘制一般有文本绘制 (例如 CoreText)、图片绘制 (例如预先解压)、元素绘制 (Quartz)等操作。
  • UI 对象操作通常包括 UIView/CALayer 等 UI 对象的创建、设置属性和销毁

AsyncDisplayKit

  • AsyncDisplayKit主要就是解决的问题就是操作页面过程中的保持帧率在60fps(理想状态下)的问题。
  • 对于排版,绘制,UI 对象操作这三项,前两项已经被 AsyncDisplayKit 扔到后台线程,因此在渲染层面将有显著性能提升;
  • AsyncDisplayKit原理分析 https://www.jianshu.com/p/21f3d46b1bc5

UIImage加载图片

  • imageNamed:
    这种方法在图片加载完成后进行缓存,下次获取读取缓存图片; 但是会一直占用内存,就算指向nil内存还是存在;如果读取的本地图片过大,采用这种方式加载会消耗大量内存
  • imageWithContentsOfFile:
    仅加载图片,图像数据不会缓存,图像会被系统以数据方式加载到程序。因此对于较大的图片以及使用情况较少时,那就可以用该方法,降低内存消耗;在获取开机页大图或引导图这种只使用一次且图片较大的情况建议采用这种方式;

离屏渲染

  • 在使用圆角、阴影和遮罩等视图功能的时候,图层属性的混合体被指定为在未预合成之前不能直接在屏幕中绘制,所有就需要在屏幕外的上下文中渲染,即离屏渲染。
  • 离屏渲染之所以会特别消耗性能,是因为要创建一个屏幕外的缓冲区,然后从当屏缓冲区切换到屏幕外的缓冲区,然后再完成渲染;其中,创建缓冲区和切换上下文最消耗性能,而绘制其实不是性能损耗的主要原因
  • 设置以下属性时,就会触发离屏渲染
    1.shouldRasterize(光栅化)
    2.masks(遮罩)
    3.shadows(阴影)
    4.edge antialiasing(抗锯齿)
    5.group opacity(不透明)
    6.复杂形状设置圆角等
    7.渐变

离屏渲染检测

  • 模拟器的 debug -> 选取 color Offscreen-Rendered; 黄色部分产生了离屏渲染


  • 使用 Instruments -> Core Animation 来监测离屏渲染和离屏渲染相关的检查选项:
    开启Color Offscreen-Rendered Yellow 或 Color Hits Green and Misses Red
    具体参见:https://www.jianshu.com/p/439e158b44de
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 2019年的开年,朱一龙的新戏《知否》收视一直走高。他饰演的齐衡小公爷虽然不是绝对的男主角,但是现在已经引起了广大...
    盐值爆表阅读 408评论 1 4
  • 文/季余星 在高街时尚风格中,印花之间的搭配,蛮具有代表性的,印花图案之间的搭配,大众接受度比较的小,难以去接受图...
    木乌阅读 690评论 1 2
  • 2019年5月13日,绝对是可以纪念的日子,因为今天长春下了今年的第一场春雨,春雨贵如油啊!我凌晨三点多第一次醒来...
    匹夫_5b52阅读 350评论 0 0
  • 你在墙内 我在墙外 忽然我走进墙内 你热情的拥抱着我 我却怕我的棱角刺痛你 愿你能磨平我的棱角 我们都能热情相拥
    不像先生阅读 228评论 0 1
  • 朱之文 草帽姐 有的人 他活着 别人能更好的活 有的人 他阔了 别人能比他还阔 有的人 他富了 别人能比他还酷 而...
    旖旎i阅读 867评论 13 28

友情链接更多精彩内容