多邻国是世界上最受欢迎的语言学习应用,因为它成功地将过去令人望而生畏的学习过程变得轻松有趣。这种轻松愉快的语言学习体验需要源源不断的新功能和实验,以及一个能够提供所有这些功能的流畅运行的应用。对多邻国而言,世界任何地方的设备上出现无响应应用都可能意味着一个潜在的沮丧学习者。这使得他们致力于应用卓越,尤其是在其百分之六十的学习者(包括他们的首席执行官,他使用入门级手机跟踪应用)所使用的 Android 设备上。因此,当多邻国的 Android 开发团队注意到“应用无响应”错误和掉帧现象增加,甚至收到了手写投诉时,他们立即采取了行动。
他们很快发现了应用性能问题的根源:现有的软件架构无法很好地随着团队的成长而扩展。必要的更新导致了应用痛苦的性能倒退。他们的开发者将更多时间用于修复错误,而较少时间用于发布新的创收功能。他们过时的软件架构开始成为一个无法接受的拖累——对他们、他们的团队速度,以及最重要的是,对他们用户的体验都造成了影响。他们需要从头开始重建他们的代码库。
他们是如何做到的
一开始,团队内部存在分歧。这应该是他们当前唯一的优先事项吗?一组人认为继续推出新功能和推动营收更为重要,而另一组人则认为将所有注意力集中在 Android 重启上才是前进的方向。最终,他们达成共识,认为不断增加的修复回归的努力可能会完全偏离他们的路线图。他们必须全力以赴。
团队选择了一个日益流行的解决方案。他们决定使用 Model-View-ViewModel (MVVM) 模式重写他们的应用,这是一种由 Google 支持的软件模式,它通过创建清晰的关注点分离,让开发者可以简化应用架构。有了 MVVM,他们可以将图形用户界面(视图)的开发与业务逻辑(模型)的开发分开。他们可以建立清晰且一致的模式,使得统一新功能的开发方法和新入职开发者的培训变得更容易。
将每个功能分解成独立的模块化部分,使得团队能够迅速恢复生产力,因为他们可以分配小组并行处理每个功能,从而提高速度并减少错误。
他们使用 Android 的 Jetpack 库(包括 Dagger 和 Hilt)实现了这种新架构,以帮助他们编写在不同 Android 版本和设备上一致运行的代码。这两个新增功能使他们能够创建更好的封装功能,并 更有效地利用 Android 的内置模块。
结果
这些性能提升显著改善了学习者在 Android 设备上,尤其是在入门级设备上的体验。它们还带来了在旗舰设备上更灵敏的应用和更流畅的动画。每日“应用无响应”(ANR)率下降了 41%。应用帧率低于目标帧率的时间百分比下降了 28%。最重要的是,用户在滚动关键屏幕时的速度提高了 40%。
双手拿着写有“ANR 减少 41%,帧率提高 28%,体验速度提高 40%”的笔记。
整个重构耗时八周,显著提升了多邻国所有学习者的应用吸引力和愉悦度。在随后的六个月里,团队没有记录到任何显著的新性能回归,这让他们可以再次专注于推出创收功能。将团队精力集中在质量上的决定得到了回报。
多邻国对其使命的投入使其成为语言学习领域的全球顶级应用。他们对应用卓越的承诺——创造尖端教育体验而不牺牲可访问性——是他们保持领先地位的原因。
开始使用
如果您想深入了解多邻国如何整合 Jetpack 库以及 Model-View-ViewModel 如何改进其应用,请阅读我们面向开发者的技术案例研究。