作家
登录

IOS使用Instrument-Time Profiler工具分析和优化性能问题

作者: 来源: 2017-08-21 15:49:15 阅读 我要评论

最终的分析优化的结不雅把时光大年夜90ms的数量级降低到了2ms的数量级,达到了一个比较流畅的效不雅。具体的分析优化步调请往下看。

【51CTO晃荡】8.26 带你与清华大年夜学、搜狗、京东大年夜咖们一路商量基于算法的IT运维实践


背景

前不久我做了一个富文本编辑对象,编辑器碰到了一个机能问题是添加多张图片,当滚动编辑区域,碰到图片切换的时刻会有明显的卡顿现象。这篇文┞仿基于这个卡顿的机能问题进行机能瓶颈的分析以及做对应的优化。

可以打开这个链接 iOS应用UITableView实现的富文本编辑器 查看我的文┞仿,这篇文┞仿所用的项目也是基于这个项目标。

既然问题是产生在图片切换的时刻,图片是放在零丁的一个Cell中的,那么就测验测验在Cell的衬着办法 cellForRowAtIndexPath 添加两个Log,查看办法履行所用的时光。

对应的结不雅:

  1. 2017-08-11 06:12:48.744 RichTextEditDemo[6867:1064632] ======begin render cell 
  2.  
  3. 2017-08-11 06:12:48.749 RichTextEditDemo[6867:1064632] ======end render cell 
  4.  
  5. 2017-08-11 06:12:49.261 RichTextEditDemo[6867:1064632] ======begin render cell 
  6.  
  7. 2017-08-11 06:12:49.266 RichTextEditDemo[6867:1064632] ======end render cell  

大年夜日记打印的时光上看,大年夜概每衬着一个Cell只要发几毫秒的时光,貌似问题不会涌如今这个地位,然而这并不是本相,很明显的,其他处所不会影响到,所以得用更高等的分析对象去分析查看。

发明问题

Instrument是一个很好的机能分析对象,可以分析内存分派、内存泄漏、收集情况、CPU占用等和机能有关的问题,当前的机能问题是耗时的问题,可以应用 Instrument 的 Time Profiler 进行分析

让这个列表滚动,并且有进行图片Cell的切换

可以看到Time Profiler 有下面的记录,红色框中就是Cell切换所消费的时光值,这个时光的增长很明显的高于其他值了,所以这个就是我们要定位到的处所了。

Tips

  • alt + 鼠标滚轮 -> 缩放时光轴
  • shift + 鼠标滚轮 -> 移动时光轴
  • 按注目标框选 -> 选择和定位时光轴

第一步要在时光轴上框选一个范围,标识选择这个范围进行分析,才能准肯定位到这个问题,如图(1)地位所示;第二步要选在客栈中的某一个函数,一般的选择到OC函数调用,更底层的函数调用就到了CF层是C说话实现的就不好分析了,所以这里选择的是 [UIImage drawInRect:blendMode:alpha] 这个函数分析,可以看到这个函数调用说花费的时光是 92ms,这是一个比较长的时光了,所以应当就是这里导致的卡顿了。

这个函数花费的时光和image图片的大年夜小有关系的,选择另一个时存放值范围,这个时存放值范围是产生在小图之间的切换的

结不雅

这个处所消费的时光就比较小一点,不过也是达到了25ms,对于机能也是有必定的影响的。

解决问题

以上的分析可以得出结论:[UIImage drawInRect:blendMode:alpha] 函数的调用是会导致机能问题的,因为UITextView内部处理图片的方法是经由过程调用 [UIImage drawInRect:blendMode:alpha] 函数绘制图片实现的。

既然是UITextView内部的处理方法,所以这个函数调用行动是应用层改变不了的,不过UIImage对象是我们可以控制的,或者可以改变图片的显示方法来达到优化的目标,所以就有了以下的两种筹划。

筹划1

第一种方檀卷是对预览的图片进行紧缩,然后再设置到NSTextAttachmen中,放到UITextView中显示

  1. textAttachment.image = self.image; 
  2. // ===> 修改为 
  3. // scaletoSize用于紧缩原始的图片,textAttachment中的image对象是紧缩过后的 
  4. textAttachment.image = [self.image scaletoSize:showImageWidth]; 

      推荐阅读

      运维工程师必备的18个网络带宽监控常用命令

    【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索 本文介绍了一些可以用来监控收集应用情况的Linux敕令行对象。这些对象可以监控经由过程收集接口传输的数据>>>详细阅读


    本文标题:IOS使用Instrument-Time Profiler工具分析和优化性能问题

    地址:http://www.17bianji.com/lsqh/36827.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)