iOS冷启动速度提升50%

2020-09-14  本文已影响0人  Michale_Zuo

 随着项目的不停迭代复杂,app的启动时间越来越慢,影响了用户体验。所以,我们决定进行一次app的冷启动优化,减少用户的启动等待时间,提升用户体验。
 一个完整的冷启动过程大致可以分为3个阶段

 问题:如何量化耗时操作?
 Xcode集成的Profile和火焰图可以查看各个阶段的耗时,定位到具体哪些操作拖慢了了冷启动。由于Profile的使用教程网上一大堆,这里就不做详述。
 笔者通过Profile分析冷启动过程,发现了最耗时的操作大致是以下几点:
 1.main函数到didFinishLaunchingWithOptions阶段集中了大量的sdk初始化,配置和各种数据的初始化。
 2.执行了大量+load()方法
 3.首页一些比较隐晦的耗时操作

解决方案

 1、根据业务的优先级与紧急程度整理初始化配置项的加载顺序
根据我们APP的业务场景,大致分为了三个优先级等级(A、B、C,优先级一依次降低)

优先级A:一些防止越界保护的分类,环境设置等,app一开始就需要的
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions

image.png
优先级B:必要的正常业务,比如定位,埋点,热修复的初始化等
优先级C:比如城市数据库加载等,首页viewDidDisappear方法渲染完成以后开始加载

 2、我们的项目有用到路由跳转,当时框架设计的时候,+()load里进行路由注册,后期业务迭代,load方法越来越多,耗时达到了700ms左右。后来将路由注册的操作放在application didbecomActivite方法了统一注册,耗时减少了300ms左右。
思路:在编译的时候,通过attribute((section()))将方法注册到指定输入段中,在启动后某个时机一起进行注册
详情请看demo

 3、整理首页UI初始化和加载逻辑,将一些耗时的操作初始化懒加载,可以后置的业务尽量后置

 经过整理App的启动速度大概提升了50%左右。

上一篇下一篇

猜你喜欢

热点阅读