instrument-Time Profile

作者: 爱思考的阿喵 | 来源:发表于2019-03-26 19:36 被阅读1次

    开发过程中经常需要进行app中耗时操作检测,一般方法是使用instrument的time profile来检测.

    time profile的检查原理很简单就是定时抓取线程上的方法堆栈调用,计算一段时间内的各个方法的耗时.

    因为模拟器的硬件全部基于主机,性能远比真机要好很多,为尽最大可能还原真实情况,检测时一般用真机,且是release版本的app.

    小插曲:
    我在打包release版本是用Ad Hoc证书,但打包出来,time profile无法启动,报以下错误,原因未知,有知道的要告诉我哦.


    Time_Profile_Fail.png

    折腾了半天,导出时选择Developement就能正常运行起来,现在还不清楚是因为什么.


    Time_Profile_Export.png

    用手机装上打包出来的ipa文件,在instrument运行,检测,这时会看到全是二进制地址,没有被符号化,


    Time_Profile_NoSymbol.png

    不用急,只需继续检测,直到检测完成,点击左上角停止按钮,停止检测.然后File->Symbols
    进行配置


    Time_Profile_Configure.png

    注意:配置时配置的是Binary Path,这个路径对应的内容来源是将ipa文件解压,取解压后的二进制文件;dsYM path是自动搜索匹配的,所以打包生成的archive文件本地一定得有;如果archive文件中没有dsYM文件,那么则需要查看项目中build settiing中Debug Information Format中是否选的是DWARF with dSYM File.

    配置完成后原先的二进制就会被符号化了,这时就可以查看具体的耗时方法了.为了方便产看分析,instrument有很多条件项可供选择


    Time_Profile_Filter.png

    Input Filter & Involves Symble:用于直接过滤的,简单明了
    Call Tree:调用树,里面有很多选项

    • Separate by Thread:以线程分类,能很清晰看出每个线程总消耗时间
    • Invert Call Tree:选中该选项后,调用栈会自上至下显示,这个通常是需要选中的,选中后调用栈中最深的方法被显示最上面.
    • Hide System Libraries:隐藏系统库相关方法,只显示自己app中出现的符号
    • Flatten Recursion:该选项将每一个调用栈中的递归函数视作单一入口,而不是多入口。
    • Top Functions:该选项是相当于归总显示,显示的是方法的总耗时,双击后定位到源码处会逐一显示内部调用的其他方法的耗时时间.这一选项非常有用,因为它能让你在每次进入调用栈时找到花费最长的时间,瞄准你最耗时的方法。


      Time_Profile_Call_Tree.png

    Call Tree Constraints:用于过滤的,可以对时间进行过滤,如可以过滤掉小于10ms的数据,可以在Min中填入10

    下面进入具体分析阶段,我分析的是启动时的耗时


    Time_Profile_Result.png

    1.主线程耗时最大花费60ms,用于加载图片,图片比较大,耗时,可以压缩图片优化
    2.其他大部分消耗用于UI的构建
    选中Top Function后


    Time_Profile_Result_Top_Function.png
    1.发现didFinishLaunchingWithOptions方法消耗了大量时间,里面进行了大量的配置工作,优化时可以将不必要的配置移除掉.
    2.viewDidLoad方法可以UI的懒加载来优化

    以上主要是针对Time-Profile的使用,分析的话要具体案例具体对待,仁者见仁智者见智,关于启动优化的文章,强烈推荐下面这一篇,有兴趣的请移步https://mp.weixin.qq.com/s/Kf3EbDIUuf0aWVT-UCEmbA

    相关文章

      网友评论

        本文标题:instrument-Time Profile

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