启动耗时分析
-
WWDC(Optimizing App Launch - WWDC19) 启动耗时组成描述
-
头条 启动耗时组成描述
-
美团 启动耗时组成描述
-
yy启动优化 启动耗时组成描述
-
抖音启动优化 启动耗时组成描述
文中提到的kCFRunLoopBeforeTimers,是CFRunLoopActivity的其中一个枚举值
CFRunLoopActivity是使用 CFRunLoopObserverCreate创建观察器时,将选择调度观察器的RunLoop的各个阶段。
官方文档
后续上线、防止劣化、统计准确性的手段文章中也描述得很清晰。
文章中优化思路理解
- preMain
- 动态库的减少(减少加载动态库的时间)
- 相关基本概念
- 动态库(Build Setting->Linking->Mach-O Type会是dynamic library)
-
静态库(Build Setting->Linking->Mach-O Type会是static library)
- 具体操作方案
- 减少不必要的动态库
- 动态库、弄成静态库
- 原理:运行起来dyld再做动态库加载的时机、放到构建打包时,减少加载动态库的时间。
- 实操起来,可能会有符号重复的问题(我没有遇到)。
- 有对应的脚本、可以将动态库改成静态库,打成新的xcframework。(本人相关调研文章绿洲iOS启动优化理解、补充阅读、实操笔记 2024-03-19)
- cocoapods相关配置(本人相关调研文章绿洲iOS启动优化理解、补充阅读、实操笔记 2024-03-19)
- 相关基本概念
- load方法的减少、静态方法的减少
- load的调用时机是preMain的。
- load内的改成initialize的话,就变成懒加载了,到真正使用到这个类,才调用intialize内对类内初始化。
- 动态库的减少(减少加载动态库的时间)
- Main后
- didFinishLaunch内所做的内容的减少
- 首屏渲染
参考文章
Optimizing App Launch - WWDC19 - Videos - Apple Developer
Category的本质<二>load,initialize方法 - 简书 (jianshu.com)
【性能优化】今日头条iOS客户端启动速度优化 (qq.com)
美团外卖iOS App冷启动治理 - 美团技术团队 (meituan.com)
iOS 启动优化 + 监控实践 - 掘金 (juejin.cn)
抖音品质建设 - iOS启动优化《实战篇》 - 掘金 (juejin.cn)
iOS-底层原理 31:启动优化之二进制重排_ios二进制重排原理-CSDN博客
iOS之性能优化·优化App的启动速度