美文网首页
iOS启动优化之PGO优化

iOS启动优化之PGO优化

作者: 夜凉听风雨 | 来源:发表于2022-09-14 10:56 被阅读0次

    参考博客

    前言

    本文不再详细阐述iOS启动流程,以及二进制重排的详细原理。只介绍一种相当简单有效的优化启动时间的方法。这就是****Profile Guided Optimization,可以大幅度降低page In 次数。

    附一个非常古老的苹果文档

    二进制重排 ,Page In 相关概念可以参考一下抖音二进制重排方案

    PGO配置

    PGO是苹果官方提供的工具,具体使用方法是点击xcode工具栏 Product -> Perform Action -> Generate Optimization Profile 按xcode提示操作即可

    image.png

    点击Run后待项目启动完成后,点击xcode的停止按钮,项目中会自动添加一个OptimizationProfiles文件夹。在build setting中搜索 Use optimization Profile,将release配置为yes。
    需要注意的是,苹果文档中说明,PGO只支持release环境!!!所以在运行的时候需要把运行改为release模式。

    image.png

    查看项目Page In次数

    配置PGO完成后可以用instruments查看项目pageIn次数。效果相当可观。具体操作步骤 点击Xcode工具栏Product -> Profile -> System trace

    image.png

    点击红色按钮等待项目完全启动完毕,再点击暂停按钮,得到分析数据,搜索main Thread,如图

    image.png

    每次启动得到的Page In次数并不会完全相同,这取决于app占用的物理内存是否已经被覆盖。杀死app之后,app的物理内存有可能还在。

    优化前后对比

    由图可以看出,优化前后page in的次数有明显降低。

    image.png 优化后.png

    PGO对比二进制重排

    • 优点:简单方便
      二进制重排需要自己插桩来获取启动后执行的函数调用方法,这一步是非常繁琐的,然后再去写order文件。而PGO只需要直接使用xcode的一个功能,非常简单。

    • 缺点:只能优化单一的逻辑代码
      PGO只能在执行一次启动流程后,进行这一个流程中执行代码的优化。如果app启动时可能有多套逻辑,不同状态进入会走不同的代码逻辑的话,它是没法优化其他逻辑的。但是二进制重排,可以自己插桩,把所有逻辑都走一遍,获取所有走过的函数方法,进行重排,达到优化效果。

    相关文章

      网友评论

          本文标题:iOS启动优化之PGO优化

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