JioSaavn 成立于 2007 年,是一家领先的音乐和播客流媒体服务提供商。他们拥有 900 多个唱片公司合作伙伴关系,并以 16 种语言播放 8000 多万首歌曲。JioSaavn 应用还提供 6 种印度地区语言版本。
JioSaavn 的技术栈支持超过 1 亿月活跃用户 (MAU),能够大规模、高速运行。其用户通常使用资源有限的 Android 手机,因此用户体验对 JioSaavn 团队至关重要。
挑战
从工程角度来看,在低端和中端移动设备等受限环境中进行优化既具有挑战性,又令人兴奋。JioSaavn 面临的挑战是如何针对其主要目标用户(使用低端和中端移动设备,主要位于印度二三线城市的用户)优化用户体验。
通过分析渠道,很明显,相当一部分用户会启动应用,但不会收听歌曲。团队认定应用启动时间是造成这种情况的原因。因此,改进应用启动时间与提高应用上的听众数量有关。
他们的方法
JioSaavn 依靠全面的分析和强大的工具集(如 Perfetto、dumpsys 等)来分析此问题并找到可持续的解决方案。团队在应对这一挑战时遵循两项原则:并行工作和延迟加载。
在 Google 的分析帮助下,团队确定了任务优先级:
- 使用 systrace 和 perfetto 研究应用流程,分析痛点,验证应用启动时间的改进。
- 延迟初始化:已识别可延迟到主页显示后初始化的片段/实例/类 -
- 广告
- 音乐服务(前台服务)和播放器资源(例如 Exoplayer、缓存播放器队列等)
- 启动时最小化的播放器片段。
- 按需初始化:根据需要初始化各种库(例如 Facebook 库)。
- ViewStub:视图膨胀和资源加载很繁重。团队使用 ViewStub 简化了布局,并将图像转换为 WebP 格式。
- 工作线程:一些不需要 UI 线程的任务已移至后台线程,以释放 UI 线程。
- 拆分缓存数据 - 从文件中读取和解析巨大的缓存数据需要大量时间。团队将其拆分为关键数据(显示主页所需)和非关键数据。
- AsyncLayoutInflater:主页 RecyclerView 需要的一些视图使用 AsyncLayoutInflater 预先膨胀。
使用的工具 - Perfetto、Systrace、Google Play 核心指标、Android Studio Profilers、Firebase Performance SDK
结果
JioSaavn 团队通过多个版本的应用程序发布了这些更改以保持应用程序稳定性。他们取得了以下成果 -
- 所有设备上的应用程序启动时间提高了 30%,低端和中端设备提高了 35% - 40%。
- 首页浏览量/日活跃用户数提高了 5%,从而降低了跳出率。
此次优化工作使整个团队团结起来。进行了详细的讲解,使团队对这些更改感到满意,并培养了以性能为中心的应用程序方法。
“JioSaavn 旨在改善来自印度不同地区和城市的用户的收听体验,
并在经济承受能力方面涵盖了各个层面。因此,超越其所在地区的移动网络基础设施,并在用户的设备能力范围内优化用户体验是我们一直在努力的目标。感谢 Google 开发者关系的指导,我们能够朝着这个方向迈出决定性的一步。”– JioSaavn 产品团队