学习笔记: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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本王今日很无聊, 趴卧门前欲望消。 纵有鼠辈当街闹, 自观心佛志不摇。
    墨趣356阅读 3,828评论 15 18
  • 大家好,这里是一周进步。 相信熟悉的同学一定都知道,从七月开始我们每月都会定期整理一份月刊,把当月的优秀文章再次推...
    一周青年阅读 4,563评论 2 54
  • 极致男人初长成系列 俗话说,人靠衣装马靠鞍,一个人的穿着不仅可以提高颜值,还可以提高一个人的气质,让自己变得更自信...
    智客_尚无极阅读 2,726评论 0 1