Wrappres' Studio.

App启动速度优化

字数统计: 429阅读时长: 1 min
2019/09/15 Share

App启动速度优化

App 冷启动主要分为三个阶段

  • main() 函数执行前

  • main() 函数执行后

  • 首屏渲染完成后

main() 函数执行前

系统主要做以下几件事:

  • 加载可执行文件(App 的.o 文件集合)
  • 加载动态链接库,进行 rebase 指针调整和 bind 符号绑定
  • Objc 运行时的初始化处理,包括 Objc 相关累的注册,category 注册,selector 唯一性检查
  • 初始化,包括了执行 +load() 方法,attribute((constructor)) 修饰的函数的调用,创建 C++ 静态局部变量

响应优化的方向有:

  • 减少动态库加载,每个库本身都有依赖关系,在使用动态库数量将多时,尽量将多个动态库进行合并。
  • 减少加载启动后不会去使用的类或者方法
  • +load() 方法里的内容可以放到首屏渲染完成后再执行,或使用 +initlalize() 方法替换掉。因为,在一个 +load() 方法里,进行运行时方法替换操作会带来 4 毫秒的消耗
  • 控制 C++ 全局变量的数量

main() 函数执行后

指的是从 main() 函数执行开始,到 appDelegate 的 didFinishLaunchingWithOptions 方法里首屏渲染相关方法的执行完成。
首页的业务代码都在这个阶段,包括:

  • 首屏初始化所需的配置文件的读写操作
  • 首屏列表大数据的读取
  • 首屏渲染的大量计算等

优化:各类SDK的初始化工作,应该放在合理的位置,而不是全都在 didFinishLaunchingWithOptions 中。只有那些 App 启动必要的初始化功能,才应该在 didFinishLaunchingWithOptions 中被执行。

首屏渲染完成后

CATALOG
  1. 1. App启动速度优化
    1. 1.1. main() 函数执行前
    2. 1.2. main() 函数执行后
    3. 1.3. 首屏渲染完成后