区块链技术博客
www.b2bchain.cn

大厂这么做iOS(5):快到不习惯的冷启动!求职学习资料

本文介绍了大厂这么做iOS(5):快到不习惯的冷启动!求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

冷启动时长是App性能的重要指标,作为用户体验的第一道“门”,直接决定着用户对 App 的第一印象。—-美团外卖iOS App冷启动治理

快,并不是 Gojito 启动器追求的第一要务,大厂的 APP 有很多组件,有些非常重要,比如集成环境设置组件,必须要放在启动后越早的位置越好。因为一旦 APP 启动后,第一个需要读取的就是当前 APP 的集成环境,根据环境来选择不同的 Host。因此,我们还需要 Gojito 启动器拥有按优先级启动不同组件的能力

可量化,可监控是 Gojito 启动器需要拥有的第二个能力。由于大厂 APP 有多人、多个团队开发,各团队分工合作,互不干预,因此很很能出现其他团队开发的组件影响 APP 启动时间的情况。因此,我们需要一个可监控的启动器作为收口,通过上传各个启动组件在 APP 启动阶段占用的时长来评估各组件是否设计合理。

各组件能实现自注册是 Gojito 启动器的一个加分项,但却直接影响了 APP 启动器的设计。由于大厂可能拥有多个 APP,同一个组件需要在不同的 APP 中实现启动时加载,这也是司空见惯的,因此我们需要实现一个各组件本身具有启动时加载自身能力的启动器。需要注意的是,各组件能实现自注册是一个不能被滥用的功能。

创建启动器模块

在 Gojito 同级目录下创建组件 GJTAppLauncher 以及 GJTAPPLauncherModule,前者是启动器的底层实现,后者是本 APP 的启动器模块,实现对前者的调用,如图:
大厂这么做iOS(5):快到不习惯的冷启动!

Gojito启动器

与传统的启动阶段相比,我们的启动器能涵盖 willFinishLaunchdidFinishLaunch、“渲染”等阶段。

高中低优先级启动器

将启动任务按优先级划分,我们可以让高优先级的任务先执行,低优先级的任务后执行。我们称前者为“头部任务”(head task)、后者为尾部任务(tail task)。
大厂这么做iOS(5):快到不习惯的冷启动!

带有优先级的启动器

目前我们将首页的渲染作为尾部任务,虽然我们题目是“快到不习惯的启动”,将 UI 页面放在头部可能会非常快,但前期诸如定位、网络等任务不加载,那么即使首页面启动后也会在等待中度过,仍然会给用户带来不好的体验。
我们再次回首一下这张流程图,可以发现,其实 GJTApplicationModule 虽然调用了 GJTAppLauncher 组件,但其实其内部的头部任务和尾部任务等能顺利执行,也是归功于 GJTAppLauncher 内部处理,他们分工合作,一个负责业务,一个负责底层实现,这种设计很巧妙。

冷启动时长是App性能的重要指标,作为用户体验的第一道“门”,直接决定着用户对 App 的第一印象。—-美团外卖iOS App冷启动治理

快,并不是 Gojito 启动器追求的第一要务,大厂的 APP 有很多组件,有些非常重要,比如集成环境设置组件,必须要放在启动后越早的位置越好。因为一旦 APP 启动后,第一个需要读取的就是当前 APP 的集成环境,根据环境来选择不同的 Host。因此,我们还需要 Gojito 启动器拥有按优先级启动不同组件的能力

可量化,可监控是 Gojito 启动器需要拥有的第二个能力。由于大厂 APP 有多人、多个团队开发,各团队分工合作,互不干预,因此很很能出现其他团队开发的组件影响 APP 启动时间的情况。因此,我们需要一个可监控的启动器作为收口,通过上传各个启动组件在 APP 启动阶段占用的时长来评估各组件是否设计合理。

各组件能实现自注册是 Gojito 启动器的一个加分项,但却直接影响了 APP 启动器的设计。由于大厂可能拥有多个 APP,同一个组件需要在不同的 APP 中实现启动时加载,这也是司空见惯的,因此我们需要实现一个各组件本身具有启动时加载自身能力的启动器。需要注意的是,各组件能实现自注册是一个不能被滥用的功能。

创建启动器模块

在 Gojito 同级目录下创建组件 GJTAppLauncher 以及 GJTAPPLauncherModule,前者是启动器的底层实现,后者是本 APP 的启动器模块,实现对前者的调用,如图:
大厂这么做iOS(5):快到不习惯的冷启动!

Gojito启动器

与传统的启动阶段相比,我们的启动器能涵盖 willFinishLaunchdidFinishLaunch、“渲染”等阶段。

高中低优先级启动器

将启动任务按优先级划分,我们可以让高优先级的任务先执行,低优先级的任务后执行。我们称前者为“头部任务”(head task)、后者为尾部任务(tail task)。
大厂这么做iOS(5):快到不习惯的冷启动!

带有优先级的启动器

目前我们将首页的渲染作为尾部任务,虽然我们题目是“快到不习惯的启动”,将 UI 页面放在头部可能会非常快,但前期诸如定位、网络等任务不加载,那么即使首页面启动后也会在等待中度过,仍然会给用户带来不好的体验。
我们再次回首一下这张流程图,可以发现,其实 GJTApplicationModule 虽然调用了 GJTAppLauncher 组件,但其实其内部的头部任务和尾部任务等能顺利执行,也是归功于 GJTAppLauncher 内部处理,他们分工合作,一个负责业务,一个负责底层实现,这种设计很巧妙。

冷启动时长是App性能的重要指标,作为用户体验的第一道“门”,直接决定着用户对 App 的第一印象。—-美团外卖iOS App冷启动治理

快,并不是 Gojito 启动器追求的第一要务,大厂的 APP 有很多组件,有些非常重要,比如集成环境设置组件,必须要放在启动后越早的位置越好。因为一旦 APP 启动后,第一个需要读取的就是当前 APP 的集成环境,根据环境来选择不同的 Host。因此,我们还需要 Gojito 启动器拥有按优先级启动不同组件的能力

可量化,可监控是 Gojito 启动器需要拥有的第二个能力。由于大厂 APP 有多人、多个团队开发,各团队分工合作,互不干预,因此很很能出现其他团队开发的组件影响 APP 启动时间的情况。因此,我们需要一个可监控的启动器作为收口,通过上传各个启动组件在 APP 启动阶段占用的时长来评估各组件是否设计合理。

各组件能实现自注册是 Gojito 启动器的一个加分项,但却直接影响了 APP 启动器的设计。由于大厂可能拥有多个 APP,同一个组件需要在不同的 APP 中实现启动时加载,这也是司空见惯的,因此我们需要实现一个各组件本身具有启动时加载自身能力的启动器。需要注意的是,各组件能实现自注册是一个不能被滥用的功能。

创建启动器模块

在 Gojito 同级目录下创建组件 GJTAppLauncher 以及 GJTAPPLauncherModule,前者是启动器的底层实现,后者是本 APP 的启动器模块,实现对前者的调用,如图:
大厂这么做iOS(5):快到不习惯的冷启动!

Gojito启动器

与传统的启动阶段相比,我们的启动器能涵盖 willFinishLaunchdidFinishLaunch、“渲染”等阶段。

高中低优先级启动器

将启动任务按优先级划分,我们可以让高优先级的任务先执行,低优先级的任务后执行。我们称前者为“头部任务”(head task)、后者为尾部任务(tail task)。
大厂这么做iOS(5):快到不习惯的冷启动!

带有优先级的启动器

目前我们将首页的渲染作为尾部任务,虽然我们题目是“快到不习惯的启动”,将 UI 页面放在头部可能会非常快,但前期诸如定位、网络等任务不加载,那么即使首页面启动后也会在等待中度过,仍然会给用户带来不好的体验。
我们再次回首一下这张流程图,可以发现,其实 GJTApplicationModule 虽然调用了 GJTAppLauncher 组件,但其实其内部的头部任务和尾部任务等能顺利执行,也是归功于 GJTAppLauncher 内部处理,他们分工合作,一个负责业务,一个负责底层实现,这种设计很巧妙。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 大厂这么做iOS(5):快到不习惯的冷启动!求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们