美文网首页
iOS 启动优化

iOS 启动优化

作者: 码农二哥 | 来源:发表于2022-05-15 19:05 被阅读0次

    启动优化思考

    在面试时遇到这个问题,很多人信手拈来,上来就说:+load、减少离屏渲染、二进制重排等。不得不说,针对这个问题,这确实很重要的一环,对于工作 3 年左右的工程师没有任何问题,但对于 > 5 年的高级研发工程师,是不是显得思考、方案不够系统化呢?(记住:面试时面试、盖楼是盖楼,我们可以稍微系统化思考一下这个问题)

    5W2H 简单思考一下

    • Why:为什么需要做这件事,表面上是需要完成任务,但是我们可以去剖析对方让我们完成这件事背后的意义所在;
    • What:启动优化到底是个什么样的事情?是如何定义的?启动怎么算开始?怎么算结束?
    • Who:谁来做最合适方便?(谁被忽略了?谁是决策人?谁会受益?)
    • When:立项什么时候开始,什么时候结束?
    • Where:何处?在哪里做?从哪里入手?如:我们做哪个 app?是否可迁移到其他端等
    • How:怎么做?
    • How much:做到什么程度?数量如何?是否可量化?如何量化?

    为什么做(Why)

    • 上级安排?
    • 用户反馈 app 慢、卡?
    • 还是我们可感知的慢、卡(定性)?
    • 还是通过各种数据对比(横向 app 对比,各种技术方案对比)发现慢、卡(定量)?

    启动定义(What)

    System Interface(Dyld 加载共享库和框架、初始化系统底层组件等) -> Runtime 初始化 -> UIKit 初始化 -> Application 初始化 -> 首帧 -> 用户可交互

    建立指标(How much)

    第一个 +load(如:n 个 A 的动态库中的 +load) or 进程创建时间等 -> 首页渲染完成(如:hook *** layoutSubviews + dispatch_async、动画结束等,对于视频类 app,视频启播第一帧可能更好)

    优化方向(How)

    • 避免写 +load(减少缺页中断等)
    • 二进制重排(减少缺页中断等)
      ** 思考1:如何分析启动时缺页中断次数?
      ** 思考2:order_file 是什么?怎么来?怎么用?
    • 非首屏必需的任务(延后)
      ** 非必需启动的任务:延后调度
      ** 非首屏内容:延后加载、绘制
    • 首屏必需任务(提优、加速)
      ** 数据层
      ****** 提升首页请求优先级、预加载、本地缓存
      ****** 数据解析时加载图片、视频等
      ** UI 层
      ****** 利用数据加载的空闲时间预渲染预渲染
      ****** 减少离屏渲染

    防止劣化

    • 上线前:自动化测试对比
    • 上线后:线上监控

    相关文章

      网友评论

          本文标题:iOS 启动优化

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