APP启动优化

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容