iOS 项目启动时间的优化

17年初开始接手公司项目,到七月份上架的项目,再迭代到18年五月的时候发现项目的启动时间有点难以接受,用TimeProfiler检测的话是2.2 到2.7s不等,优化App启动时间已经排到紧急的事情上了。

 App启动时间分为pre-main 和 main 函数到第一个界面渲染完成。

对于pre-main这边的时间查看可以用官方提供的方法(如图一),添加一个DYLD_PRINT_STATISTICS 并设置值为1


图一

然后运行项目,再控制台就可以看到图二的输出


图二

这个阶段的优化,笔者因为水平原因,暂且搁置,主要讨论下第二个阶段,也就是main 函数到第一个界面渲染完成时间的优化。
当然,优化之前我们需要先确认下项目中究竟什么地方拖慢了App启动,这里用到的工具xcode自带的工具Instrument中的TimeProfiler(使用方法的话就不做过多的赘述)

先说说笔者自己项目中存在的问题,因为一直是独立开发,然后笔者习惯于每个三方sdk都新建一个appdelegate的分类,然后在分类里写好初始化方法并在appdelegate中调用。

而在appdelegater中的application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions中,笔者将初始化首页、初始化SDK以及需要检测的一些接口请求都堆积在这,其实大可不必的。

为此我新建了一个控制类,将不需要第一时间在 didFinishLaunchingWithOptions调用的方法抽离出来,只保留真的第一时间需要加载的,并且删除各个三方sdk中的appdelegate的分类,并将这些不需要第一时间调用的方法放在首页的viewDidAppear中异步加载调用,因为这里不会影响到app启动的时间,删除appdelegate的分类的原因是因为分类太多的话会影响初始化加载的速度。

实际测试中。删除前和删除后在笔者项目中启动时间还是减少了的。

至此,笔者项目的启动时间从2秒多降低到了0.6s左右,暂时可以满足要求,后期再做更多的优化吧。

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

推荐阅读更多精彩内容