在提供的功能和服务相似的情况下,一款APP的启动速度往往能够决定他能否获得更多的用户。由此,APP启动速度的优化是开发中必不可少的一个环节。下面我们就来分析一下,APP启动时都做了哪些事。
APP启动时都做了什么?
一般情况下,APP的启动分为,冷启动和热启动。
冷启动是指:APP点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给他。这是一个完整的启动过程。
热启动是指:APP冷启动后,用户将它退到后台,APP的进程还在系统里的情况下,用户重新进入APP的过程。这里做的事情很少。
所以这里我们只做一下冷启动是的优化。
用户能感知到的启动慢,其实都发生在主线程上。而主线程慢慢的原因有很多,比如在主线程上进行了大量文件读写操作,在渲染周期中执行了大量计算。但是,有时你会发现即使你把首屏显示之前的这些主线程耗时都解决,还是比竞品慢。
要想解决这个问题我们还要弄清楚APP启动时都干了那些事?
APP启动指的是:从用户点击APP开始到用户看到第一个界面的时间。总结来说APP启动有三个阶段:
1.main函数执行前
2.main函数执行后
3.首屏渲染完成后
main函数执行前
主要做下面几个事情:
加载可执行文件(app的.o文件的集合);
加载动态链接库;
objc运行时的初处理;
初始化;
相应的我们可以做的优化:
减少动态库加载。
减少启动后不会使用的类和方法。
load()方法里的内容可以放到首屏渲染完成后在执行。
控制c++全局变康德数量
main函数执行后:
main函数执行后的阶段指的是:从main函数执行开始到appdelegate的
didFinishLaunchingWithOptions方法里首屏渲染的方法执行完成。
这里主要包括了:
首屏初始化所需配置文件的读写操作
首屏列表大数据的读取
首屏渲染的计算等。
很多时候,开发者把各种初始化工作都放到这个阶段执行,导致渲染完成滞后。更加好的方法应该是从功能上梳理出那些是首屏渲染必要的初始化功能,那些是APP启动必要的初始化功能,那些是只需要在对应功能开始时才需要初始化的。梳理完毕后,将这些功能分别放到合适的阶段进行。
首屏渲染完成后
这个阶段主要完成的是,非首屏其他业务服务模块的初始化,监听的注册,配置文件的读取等。从函数上来看,这个阶段就是从渲染完成时开始,到didFinishLaunchingWithOpions方法作用域结束时结束。
这个阶段用户已经能看到APP的首页信息了,所以优化的优先级排在最后。但是,那些卡住主线程的方法还是需要最优处理的。
明白了APP启动阶段需要完成的工作后,我们就可以很明确的进行启动速度的优化了。