浅谈IOSAPP冷启动优化

浅谈IOSAPP冷启动优化

随着IOS第一批开发者的离去, IOS开发这个行业变得越来越精致,技术越来越细腻。 那么今天就来谈一下WWDC在2016年中提出的冷启动优化技术 什么是冷启动呢? 就是指APP不在系统进程中第一次启动的过程。 这个过程的时间我们默认为 APP开始启动到执行APPdelegate文件中...

随着IOS第一批开发者的离去, IOS开发这个行业变得越来越精致,技术越来越细腻。

那么今天就来谈一下WWDC在2016年中提出的冷启动优化技术

什么是冷启动呢? 就是指APP不在系统进程中第一次启动的过程。

这个过程的时间我们默认为 APP开始启动到执行APPdelegate文件中的方法

WWDC 2016 中首次出现了 App 启动优化的话题,其中提到:

App 启动最佳速度是400ms以内,因为从点击 App 图标启动,然后 Launch Screen 出现再消失的时间就是400ms;

App 启动最慢不得大于20s,否则进程会被系统杀死;(启动时间最好以 App 所支持的最低配置设备为准。)

整个冷启动的过程从点击APP开始到执行didFinishLaunchingWithOptions方法为止,并且一般冷启动我们以main函数为基准

分为main函数之前和mian函数之后

在IOS的(Edit Scheme → Run → Arguments → Environment Variables → +)配置下面两个参数为1之后可以查看详细的IOS启动耗时

DYLD_PRINT_STATISTICS_DETAILS 1

DYLD_PRINT_STATISTICS 1

在pre main阶段 系统会加载App可执行文件到内存,然后执行一系列的加载链接操作,最后到App的main函数 从main函数开始到Appdelegate的didFinishLaunchingWithOptions方法 

这个阶段会绘制第一个界面, 并且完成渲染。

我们可以优化的

在didFinishLaunchingWithOptions方法里我们一般做一下逻辑:

初始化第三方sdk

配置App运行需要的环境 avoidCrash bugly 网络监听等等 文件读取使用多线程进行操作

自己的一些工具类的初始化 等等

关于耗时方法的检测 我们会用到一个叫做Instrument的工具来检测

检测教程我已经在一个教程里写过了 同时也可以参考一位博主的文章 写的很清楚大家可以看一下

我们使用Instrument的目的主要是检测出那些第三方库在加载的时候耗时比较多还有启动阶段哪些代码(类的方法)耗时比较多 进行优化或者位移。

同时分流一些主线程的任务到分线程中,保证主线程畅通。

如果有启动页的广告那么更要充分利用广告加载的时间。

总之就是一句话 尽量减少APP在第一次启动的过程中在主界面渲染阶段在主线程的耗时操作。

—————————————————————————————

APP启动前的加载流程

加载可执行文件。(App里的所有.o文件)

加载动态链接库,进行rebase指针调整和bind符号绑定。

ObjC的runtime初始化。

包括:ObjC相关Class的注册、category注册、selector唯一性检查等。

初始化。

包括:执行+load()方法、用attribute((constructor))修饰的函数的调用、创建C++静态全局变量等。

0

评论0

鱼翔浅底,鹰击长空,驼走大漠
没有账号? 注册  忘记密码?