美文网首页
APP启动优化

APP启动优化

作者: 嘿_原来你也在这里 | 来源:发表于2021-07-14 17:42 被阅读0次

    启动分为:热启动和冷启动

    1热启动:就是按下home键的时候,app还存在一段时间,这时点击app马上就能恢复到原状态,这种启动我们称为热启动。

    2.冷启动:app被kill掉也不一定代表冷启动。当app被kill掉依然存在在物理内存中,只有当物理内存中的数据被替换掉。

    此文讲了app冷启动各个阶段所做的事情,以及优化方案,本文着重讲Clang插桩优化启动速度。

    Clang 插桩

    抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%,抖音团队验证了二进制文件重排方案在iOS APP开发中可行性和稳定性。

    二进制重排方案,通过减少Page Fault缺页中断次数,达到对启动速度的优化。

    文中也解决了通过使用System Trace获取启动阶段的page fault次数,通过开启Write Link Map File查看二进制文件的布局,以及通过order_file让链接器ld按照指定顺序生成mach-o文件。

    我们知道OC的方法调用会转化成msg_send函数,所以通过hook Objc_msgSend是不是就能获取到启动时所有的函数呢?但是很遗憾,例如load方法因为是直接通过查找函数的内存进行调用,并不是通过消息机制,因此没办法hook,像block 以及C++间接函数们也是没办法通过静态扫描的方式没办法达到100%覆盖。

    因此本文主要谈谈怎么通过编译器插桩来hook所有的函数符号。

    Clang 插桩:

    在编译器就在每一个函数内部二进制数据添加hook代码来实现全局的方法。

    Clang插桩具体实践可以参考此文。

    热启动优化:

     1、数据优化,将耗时操作做异步处理。

    2、检查NSUserDefaults的存储,NSUserDefaults实际上是在Library文件夹下会生产一个plist文件,加载的时候是整个plist配置文件全部load到内存中。所以非常频繁的存取大量数据也是有可能导致APP启动卡顿的

    参考

    https://www.jianshu.com/p/4e9c6a048f6f

    https://www.jianshu.com/p/5c46d93ba135

    相关文章

      网友评论

          本文标题:APP启动优化

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