学习笔记:App 启动速度怎么做优化与监控
2019-03-17 本文已影响0人
ios小菜
最近看了戴铭大神的极客时间,来做一些笔记
APP启动分为冷启动和热启动
- 冷启动就是在app点击启动前,它的进程不在系统里,需要创建分配给他一个进程。这就是一次完整的启动过程
- 热启动,按下Home键app退之后台,在app进程的还在系统的状态,用户重新进入进去app的过程
APP启动三个阶段
- main()函数执行之前
- main()函数之后
- 首屏渲染完成后
main函数执行之前
- 加载可执行文件(App 的.o 文件的集合)
- 加载动态链接库,进行 rebase 指针调整和 bind 符
- 初始化,+load()方法,创建c++静态全局全局变量
这部分可以做的优化工作有,减少动态库的加载,减少加载启动后不会去使用的库和方法,把+load()方法执行逻辑放到首屏渲染后或者放在+initialize()里面,控制c++的全局变量数量
main函数执行之后
这个阶段一般是从AppDelegate的applicationDidFinishLaunching的方法到首屏渲染,展示来欢迎界面这个阶段。首页的任务都是放生在这个阶段,一般包括的任务有:
- 首屏初始化所需配置文件的读写操作
- 首页列表大数据的读取
- 首屏渲染的大量计算等
这部分可以做的优化工作有
- 将main() 函数开始执行后到首屏渲染完成前只处理首屏相关的业务,其他非首屏业务的初始化,监听注册,配置文件文件读取放到首屏渲染后去做
方法级别的启动优化的监控思路
一般统计一个方法的执行时间的手段有
- 定时定时抓取主线程上的方法调用堆栈,计算一段时间里各个方法的耗时,比如xcode的系统自带Time Profile就是采用这种方案
- 对objc_msgSend的方法进行hook来监控OC大部分方法的执行耗时