3、App启动速度优化与监控(iOS 开发高手课笔记)

一、App启动时都干了什么事?
一般情况下,App 的启动分为冷启动和热启动。冷启动是指app点击启动前,进程不在系统里,需要系统新创建一个进程分配给它启动的过程,是一次完整的启动;热启动则是指app在冷启动后进入后台,进程还在系统的情况下,用户重新启动app的过程,此过程事情非常少。
用户能感知的启动慢,都发生在主线程上。主线程慢的原因很多,比如在主线程上执行了大文件操作、在渲染周期中执行大量计算等。
一般来说,app的启动时间是指用户点击app开始到用户看到第一个界面之间的时间。主要包括三个阶段:
1.main() 函数执行前;
2.main() 函数执行后;
3.首屏渲染完成后。

main() 函数执行前,系统主要操作:
加载可执行文件(App的.o文件的集合);
加载动态链接库,进行rebase指针调整和bind符号绑定;
Objc运行时的初始化处理,包括Objc相关类的注册、category注册、selector唯一性检查等;
初始化,包括了执行+load()方法、attribute((constructor)) 修饰的函数的调用、创建C++静态全局变量;
相应的,此阶段对于启动速度优化来说可做的事情包括:
减少动态库加载;
减少加载启动后不会去使用的类或方法;
+load() 方法里的内容可以放到首屏渲染完成后再执行,或使用 +initialize() 方法替换掉。
控制 C++ 全局变量的数量。

main()函数执行后的阶段,指用户点击图标到appDelegate的didFinishLaunchingWithOptions方法里首屏渲染相关方法执行完成。
首页的业务代码都是在这个阶段,即首屏渲染前执行的,主要包括:
首屏初始化所需配置文件的读写操作;
首屏列表大数据的读取;
首屏渲染的大量计算等;
应该从功能上梳理出哪些是首屏渲染必要的初始化功能,哪些是App启动必要的初始化功能,而哪些是只需要在对应功能开始使用时才需要初始化的。

首屏渲染完成后的阶段,主要完成的是非首屏其他业务服务模块的初始化、监听的注册、配置文件的读取等;即是从首屏渲染完成到didFinishLaunchingWithOptions方法作用域结束;

弄清App各阶段的任务后,就可针对性地优化。包括功能级别和方法级别的启动优化。

你可能感兴趣的:(3、App启动速度优化与监控(iOS 开发高手课笔记))