iOS程序猿程序猿阵线联盟-汇总各类技术干货

instrument-Time Profile

2019-03-26  本文已影响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:调用树,里面有很多选项

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

上一篇下一篇

猜你喜欢

热点阅读