iOS 使用Instruments的Time Profiler工具进行app加载时间分析

转自:http://blog.csdn.net/face___book/article/details/50808620

Time Profiler分析原理:它按照固定的时间间隔来跟踪每一个线程的堆栈信息,通过统计比较时间间隔之间的堆栈状态,来推算某个方法执行了多久,并获得一个近似值。其实从根本上来说与我们的原始分析方法异曲同工,只不过其将各个方法消耗的时间统计起来。

现在先看一下每一部分的说明

iOS 使用Instruments的Time Profiler工具进行app加载时间分析_第1张图片
Snip20170518_13.png

1、这里控制记录过程,点击红色的"记录"按钮可以停止或开始当前正在分析的app(在记录和停止按钮之间切换),暂停键,如你所想,暂停当前正在运行的app。

2、这里是执行计时器(run timer),计时器记录着正在分析的app执行了多长时间、执行了多少次。如果你使用记录控制按钮来停止你的app,然后重启,这将创建一个新的运行记录,同时会显示"Run 2 of 2"。

3、这里被称作路径(track),就你选择的Time Profiler工具而言,因为只有一个工具,所以这里只有一条路径,关于这里显示的图标的详情,一会你就会在接下来的教程中了解更多。

4、这里是详情面板,展示的是你正在使用的工具的主要信息。就现在而言,这里展示的是最"笨重(hottest)"的方法--换句话说,占用CPU时间最长的方法。点击上方的bar会看到Call Tree(左手边的那个)并选中Sample List,然后你会看到数据的不同视图。视图展示了每一个示例。点击其中几个,你会在Extended Detail inspector中看到被捕获的堆栈跟踪。

5、这里是检查器(inspector)面板,一共有三个检查器:record setting(记录设置),display setting(展示设置),还有extends detail(扩展详情)。

Leaks的用法已经解释了call Tree里边的部分选项作用,这里介绍的全面一点

iOS 使用Instruments的Time Profiler工具进行app加载时间分析_第2张图片
Snip20170518_23.png
  • Separate by State: 测试了一下,选上此选项详情面板就没数据了,啥作用不太清除,哈哈。不过没用,
  • Separate by Thread:每个线程被单独考虑。这能让你知道哪一个线程占用CPU最多。
  • Invert Call Tree:选中该选项后,调用栈会自上至下显示。这通常是你需要的,因为你想知道CPU花费时间的那个最深的方法。
  • Hide System Libraries:选中该选项后,只有你自己app中出现的符号会被显示出来。通常选中该选项是有用的,因为你只关心CPU在你自己的代码中的哪一部分花费时间,你没法对系统库使用CPU做多少改变。
  • Flatten Recursion:该选项将每一个调用栈中的递归函数(调用它们自身的函数)视作单一入口,而不是多入口。
  • Top Functions:选上这一选项让Instruments将花费在一个函数中的总时间视作在该函数中直接花费的时间加上调用的其他函数花费的时间。所以如果函数A调用了函数B,那么函数A花费的总时间被记为A花费的时间加上B花费的时间。这一选项非常有用,因为它能让你在每次进入调用栈时找到花费最长的时间,瞄准你最耗时的方法。

下面开始看哪些代码比较耗时了。

iOS 使用Instruments的Time Profiler工具进行app加载时间分析_第3张图片
Snip20170518_26.png

这个操作占首页加载时间的2.7%,下边就去一探究竟喽。

iOS 使用Instruments的Time Profiler工具进行app加载时间分析_第4张图片
Snip20170518_27.png

定位到耗时操作的方法了,点进去看一眼

iOS 使用Instruments的Time Profiler工具进行app加载时间分析_第5张图片
Snip20170518_28.png

该方法一步一步点进去之后发现是读取沙盒的数据

iOS 使用Instruments的Time Profiler工具进行app加载时间分析_第6张图片
Snip20170518_31.png
iOS 使用Instruments的Time Profiler工具进行app加载时间分析_第7张图片
Snip20170518_32.png

大家可以试着把此操作放到子线程里边操作,加载速度就明显提升了。

这里只是用此方法打个比方,(其实这个方法已经异步操作了,哈哈哈)。重在思路你懂得。哈哈

注意:

性能优化是在所有更能实现完成时要做的事,使用Time Profile工具分析app每个流程的执行情况,发现耗时的地方,合理优化,提升用户体验,切记,优化后要做一遍详细的测试,要不然别修了东墙坏了西墙。

你可能感兴趣的:(iOS 使用Instruments的Time Profiler工具进行app加载时间分析)