APP启动优化-结合instrument

关键词:APP启动优化、 APP Launch、 Instrument

Q1. APP启动有哪几种?

  • 冷启动;
  • 热启动;
  • 继续执行(resume);

我们主要关注的是冷启动,也就是我们在手机桌面上点击了icon那一刻起 —> APP呈现首屏画面 这个过程所消耗的时间;

Q2.APP的启动过程分为几个阶段?

instrumentAPP 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阶段,当 willFInishLaunchdidiFinishLaunch 这两个方法执行完毕才算执行完毕,因此可做的操作如下:
  • 以上两个方法内的业务代码可根据情况适当defer
  • 比如:友盟的社会化分享,并不是首页所需要的,可以适当延迟注册;
2.3 首屏渲染阶段 viewDidLoadviewWillAppear 方法执行完毕之后才会呈现首屏内容,因此:
  • 我们可以将首页要展示但是不是首屏所要展示的内容放在 viewDidApper 方法内部;
  • 一些APP delegate 阶段需要做的工作也可以放在 viewDidApper 方法内部;

附Instrument的AppLaunch工作面板图:
Instrument的AppLaunch工作面板图.jpg

参考文档:Optimizing App Launch

《end》

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