JioSaavn 将应用启动时间缩短了 30%,将日活用户数量提高了 30%

JioSaavn 成立于 2007 年,是一家领先的音乐和播客音频在线播放服务公司。他们与 900 多家唱片公司合作,以 16 种语言在线播放 8000 多万首曲目。JioSaavn 应用还提供 6 种印度地区性语言。

JioSaavn 拥有支持超过 1 亿月活跃用户 (MAU) 的技术栈,能够大规模快速地运营。这类受众群体通常使用的 Android 手机资源有限,因此他们的用户体验对 JioSaavn 团队至关重要。

面临的挑战

从工程的角度来看,在存在限制的环境(例如中端移动设备中发现的那些)中进行优化可能既有挑战性,又令人振奋。JioSaavn 面临的挑战是使用中低端移动设备(主要在印度的二三线城市)优化其主要目标受众群体的用户体验。

分析该漏斗后发现,有相当一部分用户会启动应用,但不会听歌。该团队确定应用启动时间是导致此问题的原因。因此,缩短应用启动时间有助于提高应用的监听器数量。

具体做法

JioSaavn 依靠全面的分析和一套强大的工具(如 Perfetto、dumpsys 等)来分析这个问题,并得出一个可持续的解决方案。该团队根据两个原则解决了这一挑战:并行工作和懒人。

在 Google 的分析的帮助下,该团队确定了各项任务的优先顺序,

  • 使用 systrace 和 perfetto 研究应用流程、分析痛点并验证应用启动时间的缩短情况。
  • 延迟初始化:识别了可能会延迟到显示首页的 fragment/实例/类初始化 -
    • 广告
    • 音乐服务(前台服务)和播放器资源(例如 Exoplayer、缓存的播放器队列等)
    • Player Fragment,在启动时最小化。
  • 按需初始化:根据需要进行各种库的初始化(例如 Facebook 库)。
  • viewStubs:视图膨胀和资源加载过多。该团队使用 viewStub 扁平化布局,并将图片转换为 webP。
  • 工作器线程:一些不需要界面线程的任务已移至 b/g 线程以释放界面线程。
  • 拆分缓存数据 - 从文件中读取和解析庞大的缓存数据需要花费大量时间。该团队将其拆分为关键数据(显示首页所必需的数据)和非关键数据。
  • 异步 LayoutInflater:首页 recyclerview 所需的一些视图已使用 Async LayoutInflater 预先扩充。

使用的工具 - Perfetto、Systrace、Google Play Vitals、Android Studio 性能分析器、Firebase 性能 SDK

成果

JioSaavn 团队针对多个应用版本发布了这些更改,以保持应用的稳定性。他们取得了以下成效 -

  • 所有设备上的应用启动时间缩短了 30%,中低端设备的启动时间缩短了 35-40%。
  • 主屏幕浏览人数/ DAU 的提升幅度为 5%,从而降低了跳出率。

这次优化练习将整个团队凝聚在一起。他们进行了详细的演示,让团队适应这些变化,并打造以效果为中心的应用策略。

“JioSaavn 旨在为来自印度各个地区和城市的用户提供更好的聆听体验,
并且价格实惠。因此,越过其所在区域的移动网络连接基础架构,并根据用户的设备功能优化用户体验,是我们的一贯挑战。在 Google 开发者关系的指导下,我们得以朝着这个方向迈出了坚实的一步。”

- JioSaavn 产品团队