美文网首页
iOS app启动速度优化总结

iOS app启动速度优化总结

作者: CaptainRoy | 来源:发表于2019-03-14 14:24 被阅读0次
    App 启动时

    一般app分为冷启动和热启动

    • 冷启动: app点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给它启动
    • 热启动,app在冷启动后用户将app退到后台,app的进程还在系统中的情况下,用户重新启动进入app的过程,当然这个过程做的事情非常少
      因此一般app启动速度都是指冷启动的优化

    用户能感知到启动慢,其实都是发生在主线程上。而主线程慢的原因有很多,比如在主线程上执行大文件读写操作,在渲染周期中执行大量计算等。

    app启动时的过程(用户点击app开始,到用户看到第一个界面之间的时间):
    1. main()函数执行之前;
    2. main()函数执行之后;
    3. 首屏渲染完成后。
    main()函数执行之前

    在main()函数执行前,系统主要会做以下几件事:

    • 加载可执行文件(app的.o文件的集合)
    • 加载动态链接库,进行rebase指针调整和bind符号绑定
    • Objc 运行时的初始处理,包括Objc相关类的注册,category注册,selector唯一性检查
    • 初始化,包括了执行 +load()方法,attribute((constructor)) 修饰的函数的调用,创建c++静态全局变量
      因此在这个阶段,对于优化启动速度如下:
    • 减少动态库加载
    • 加少加载启动后不会去使用的类或方法
    • +load() 方法里的内容可以放到首屏渲染完成后在执行,或使用 +initialize() 方法替换掉。
    • 控制 C++ 全局变量的数量
      main() 函数执行后:
      main() 函数执行后的阶段,是指从main() 函数执行开始,到AppDelegate 的 didFinishLaunchingWithOptions 方法里首屏渲染相关方法执行完成。
      首页的业务代码都是要在这个阶段(渲染前执行)
    • 首屏初始化所需配置文件的读写操作
    • 首屏列表大数据的读取
    • 首批渲染的大量计算
      因此梳理出哪些时首屏渲染必要的初始化功能,哪些是app启动必要的初始化功能,哪些是只需要在对应功能开始使用时才需要初始化的
      首屏渲染完成后
      首屏渲染后的阶段,主要完成的是,非首屏其他业务服务模块的初始化,监听的注册,配置文件的读取等,也就是 didFinishLaunchingWithOptions 作用域内执行首屏渲染之后所有方法执行完成
      这个阶段用户已经能够看到app的首页信息
    总结
    • main() 函数开始执行后渲染完成前只处理首屏相关的业务,其他无关的业务放在首屏渲染完成后去做
    • 在首屏渲染完成前主线程中一个耗时的操作滞后或者通过异步执行

    相关文章

      网友评论

          本文标题:iOS app启动速度优化总结

          本文链接:https://www.haomeiwen.com/subject/fvmqmqtx.html