学习笔记:App 启动速度怎么做优化与监控

最近看了戴铭大神的极客时间,来做一些笔记

APP启动分为冷启动和热启动

  • 冷启动就是在app点击启动前,它的进程不在系统里,需要创建分配给他一个进程。这就是一次完整的启动过程
  • 热启动,按下Home键app退之后台,在app进程的还在系统的状态,用户重新进入进去app的过程

APP启动三个阶段

  1. main()函数执行之前
  2. main()函数之后
  3. 首屏渲染完成后

main函数执行之前

  1. 加载可执行文件(App 的.o 文件的集合)
  2. 加载动态链接库,进行 rebase 指针调整和 bind 符
  3. 初始化,+load()方法,创建c++静态全局全局变量
    这部分可以做的优化工作有,减少动态库的加载,减少加载启动后不会去使用的库和方法,把+load()方法执行逻辑放到首屏渲染后或者放在+initialize()里面,控制c++的全局变量数量

main函数执行之后

这个阶段一般是从AppDelegate的applicationDidFinishLaunching的方法到首屏渲染,展示来欢迎界面这个阶段。首页的任务都是放生在这个阶段,一般包括的任务有:

  1. 首屏初始化所需配置文件的读写操作
  2. 首页列表大数据的读取
  3. 首屏渲染的大量计算等
    这部分可以做的优化工作有
  • 将main() 函数开始执行后到首屏渲染完成前只处理首屏相关的业务,其他非首屏业务的初始化,监听注册,配置文件文件读取放到首屏渲染后去做

方法级别的启动优化的监控思路

一般统计一个方法的执行时间的手段有

  • 定时定时抓取主线程上的方法调用堆栈,计算一段时间里各个方法的耗时,比如xcode的系统自带Time Profile就是采用这种方案
  • 对objc_msgSend的方法进行hook来监控OC大部分方法的执行耗时

最后附上戴铭大神的实现工具对oc方法的调用进行监控,GCDFetchFeed

你可能感兴趣的:(学习笔记:App 启动速度怎么做优化与监控)