美文网首页
实战使用Instruments - Time Profiler

实战使用Instruments - Time Profiler

作者: Hsusue | 来源:发表于2018-07-14 15:45 被阅读237次

    最近收到反馈——IM模块语音按钮点击不灵敏,反应慢,有时点了没反应。

    初看“有时点了没反应”以为是语音按钮太小没点到,毕竟iPhoneX导航栏返回按钮也曾被反馈过难按,原因是 一样大小的返回按钮在刘海屏上变得难触。

    照这思路调了一下按钮大小然后进行测试


    大得可怕的按钮.png

    (这怎么可能没点到)特意和WX的语音按钮对比了一下大小。

    在真机上测试一遍。


    真机测试.gif

    如图,在跳转到聊天控制器后,已经第一时间仅一次按住按钮(未松手),但是还是过了一段时间才加载出来。

    得出结论:用户点击语音按钮后,未等到加载出来就松手,造成点击不到的假象。实际上是加载慢。

    这就涉及到优化问题了。之前听过杜优秀介绍过一款传说中的时间分析神器,一直没用过。是时候请上今天的主角——Time Profiler。

    打开步骤1.png
    打开步骤2.png
    主界面.png
    主界面配置.png

    PS:还有个项目配置,不配置看上去有一些地方显示一坨十六进制码,原理和bugly一样。更多请查看https://www.jianshu.com/p/0fd670547235
    测试过不配置好像没太大问题。
    配置好后按以下流程走
    0⃣️先将程序运行在设备上。
    1⃣️在图中1处选好设备和程序。
    2⃣️在图中2处勾选上Hide System Libraries,顾名思义隐藏系统函数,减少干扰。
    3⃣️点击图中3处录制按钮,此时设备将会重新开始运行程序(不进行编译过程)。
    4⃣️在设备上操作App。
    5⃣️点击图中3处录制按钮停止监测。

    开始测试!


    测试时间表.png

    其实在文头动图中除了语音呼出慢,还注意到点击联系人后跳转到聊天控制器(ChatViewController)也很慢(简书上的gif加快播放速率了,实际很慢),看看能不能顺手解决。

    在图中可以看出该控制器viewDidLoad居然用了2.14s,难怪跳转这么慢。


    展开后.png

    展开后发现罪魁祸首setupFaceView占用了2.05s。
    这个方法作用——配置表情的view,其中有许多页表情😊。想来里面肯定用了重用机制,也是在异步线程中执行,除此我想不到别的优化方法。看来只能骗一骗用户。
    理性分析一波,因为用户进入该界面通常并不会马上点击表情列表,而且该view运用懒加载,所以把该方法放到viewDidAppear里,不会重复创建对象,同时加快主界面的显示,这是惯用的小伎俩了。

    修改后再次测试发现跳转速度贼快(图见文尾)。

    再回到语音呼出慢这个问题。
    这个有点棘手,在模拟器上运行呼出很快,但是真机上却龟速。
    一开始误以为原因是模拟器的跟真机的配置不完全相同(虽然配置不同这件事是真的),但结果并不是因为配置原因。

    分析语音呼出时间图.gif

    观察右边Main Thread,发现呼出两次,主线程时间并未增加多少。再观察下方时间有变动的方法有两个。
    1⃣️-[UIButton(SDAutoLayoutButton) sd_button_layoutSubviews]
    2⃣️-[UUProgressHUD startAnimation]

    两个方法分别是button和label适应,总体也没占多少时间,即关键不在这上面。但为什么这么慢呢?

    仔细观察发现,手指按住按钮后过了一段时间,时间分析器才开始增加时间。

    最终发现原因是按钮延时响应。
    参考文章https://www.jianshu.com/p/ac821fb9b3d0
    参考文章https://www.jianshu.com/p/93b08b97968b

    照第一篇文章的方法解决了该问题。
    最终修改成效,与文章开头的动图一样的操作。

    最终成果

    以上感叹一句,Time Profiler真是一款好工具。

    相关文章

      网友评论

          本文标题:实战使用Instruments - Time Profiler

          本文链接:https://www.haomeiwen.com/subject/fpbepftx.html