APP启动优化

200 阅读1分钟

这篇写的很好,浅显易懂: mp.weixin.qq.com/s/Kf3EbDIUu…

参考: github.com/skyming/iOS…

  • 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越多,启动越慢