这篇写的很好,浅显易懂: mp.weixin.qq.com/s/Kf3EbDIUu…
- WWDC2016-406-Optimizing App Startup Time
- WWDC2017-413-App Startup Time:Past,Present,and Future
- 如何精准度量iOSAPP启动时间
- 优化 App 的启动时间-杨萧玉
- iOS客户端启动速度优化-今日头条
- iOS App 启动性能优化-WiFi管家
- iOS App如何优化启动时间-Facebook
- iOS 启动速度优化-百度输入法
- 一次立竿见影的启动时间优化
- obj中国-Mach-O 可执行文件
- iOS app启动速度研究实践
- iOS App冷启动治理:来自美团外卖的实践
1. App启动过程
解析Info.plist
加载相关信息,例如如闪屏
沙箱建立、权限检查
Mach-O加载
如果是胖二进制文件,寻找合适当前CPU类别的部分
加载所有依赖的Mach-O文件(递归调用Mach-O加载的方法)
定位内部、外部指针引用,例如字符串、函数等
执行声明为__attribute__((constructor))的C函数
加载类扩展(Category)中的方法
C++静态对象加载、调用ObjC的 +load 函数
程序执行
调用main()
调用UIApplicationMain()
调用applicationWillFinishLaunching
优化主要针对于 冷启动
影响启动性能的因素
App启动过程中每一个步骤都会影响启动性能,但是有些部分所消耗的时间少之又少,另外有些部分根本无法避免,考虑到投入产出比,我们只列出我们可以优化的部分:
main()函数之前耗时的影响因素
- 动态库加载越多,启动越慢。
- ObjC类越多,启动越慢
- C的constructor函数越多,启动越慢
- C++静态对象越多,启动越慢
- ObjC的+load越多,启动越慢