美文网首页iOS在路上iOS 的那些事儿
iOS APP启动优化--检测启动Page Faults次数

iOS APP启动优化--检测启动Page Faults次数

作者: jayhe | 来源:发表于2020-04-01 10:38 被阅读0次

    我们都知道在App启动的时候Page Faults次数多了会影响启动速度;那么如何查看我们的app启动的时候Page Faults的次数以及它对app启动的耗时影响了。本文就一起来学习下使用InstrumentsSystem Trace来检测

    检测app首次打开的场景

    • 启动Instruments
      使用Xcode选择要检测的app,Cmd+i(Profile),启动Instruments

    • 选择System Trace,点击Choose


      图片.png
    • 录制
      我们记录app启动到首屏展示的这个过程


      图片.png

    按停止之后等待工具生成数据

    • 查看数据
      在搜索框搜索main,可以看到我们检测的app,点击展开选中Main Thread,下面的看板选择Summary:Virtual Memory,如下图所示:
      图片.png

    查看系统数据File Backed Page In就记录了启动的时候发生Page In的次数了

    图片.png
    • 我们可以看到,Page In的平均每次耗时是140.79us,积少成多当可以看到3699次的时候,影响的时间就到了百毫秒的级别了520.79ms
    • 假如你的项目很庞大,启动的时候有很多模块加载之类的。那么这个次数就是以千计万计了,这个Page Faults产生的耗时就是比较明显了;这样当你做了二进制重排就有明显的提升了

    检测app退到后台再打开

    图片.png

    可以看到,app从后台回来Page In的次数很少

    检测杀掉app再打开

    图片.png

    测试了一两次发现跟从后台打开一样很少或者没有

    检测杀掉app然后打开多个其他的app

    杀掉app打开多个其他app(我打开了大概十来个吧),来看看Page In的次数,发现有200来次


    图片.png

    这里就有疑问了,app首次打开的时候Page Fault的次数很多,打开之后再打开的话就比较少,当打开多个其他app的时候,在打开检测的app发现也会有不少Page Faults

    这是由于操作系统的机制,当应用杀掉了,他所访问的物理内存不是立马就清空;它所访问的物理内存,需要通过其他app申请开辟覆盖释放掉,可以通过多打开几个应用来验证发现Page Fault次数变多了的。

    • 至此我们已经知道怎么去检测app的PageFault是的次数了。那么如果影响很大的话,就可以采用一些优化的方式[二进制重排、PGO]来提升app的启动时间了

    • app启动优化可以参考:二进制重排和Profile Guided Optimization

    相关文章

      网友评论

        本文标题:iOS APP启动优化--检测启动Page Faults次数

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