关键词:APP启动优化、 APP Launch、 Instrument
Q1. APP启动有哪几种?
- 冷启动;
- 热启动;
- 继续执行(resume);
我们主要关注的是冷启动,也就是我们在手机桌面上点击了icon那一刻起 —> APP呈现首屏画面 这个过程所消耗的时间;
Q2.APP的启动过程分为几个阶段?
从instrument 的APP launch 面板来看:分为3个阶段
阶段一:初始化(紫色线条部分)
1.1 创建进程 — create process;
1.2 接口初始化 — system interface initialization 动态库的加载;
1.3 runtime初始化 — static runtime initialization类的初始化;
阶段二:启动阶段(绿色线条部分)
2.1 UIKit初始化;
2.2 APP Delegate的执行;
2.3 首屏渲染 — initial first frame;
阶段三:APP前台活跃(蓝色线条部分)
Q3.APP启动的时间,合格时间是多少?
- 初始化阶段:
0-100ms之间; - 启动阶段:
100-400ms之间,也就是300毫秒以内;
Q4.APP启动优化可以从哪些方面入手?
1.1 创建进程
- 创建进程阶段由系统处理,此阶段可以忽略;
1.2 接口初始化阶段:
- 随着项目发展定期清理无用的动态库;
- 链接的动态库数量控制在8个以内;
- 当依赖的三方库太多尝试合并依赖库;
1.3 runtime初始化阶段;
- 针对
load方法的代码,能写在init方法内的代码,尽量写在init方法内(搭配dispatch_once_token); - 定期清理项目中一些无用的类和方法;
2.2 APP delegate阶段,当 willFInishLaunch 和 didiFinishLaunch 这两个方法执行完毕才算执行完毕,因此可做的操作如下:
- 以上两个方法内的业务代码可根据情况适当
defer; - 比如:友盟的社会化分享,并不是首页所需要的,可以适当延迟注册;
2.3 首屏渲染阶段 viewDidLoad 和 viewWillAppear 方法执行完毕之后才会呈现首屏内容,因此:
- 我们可以将首页要展示但是不是首屏所要展示的内容放在
viewDidApper方法内部; - 一些
APP delegate阶段需要做的工作也可以放在viewDidApper方法内部;
Instrument的AppLaunch工作面板图.jpg
参考文档:Optimizing App Launch
《end》











网友评论