Reddit 在其移动应用程序的新信息流架构中采用服务器驱动式 UI

Reddit 重新设计移动端 Feeds 功能

Reddit 在 iOS 和 Android 移动应用中重新设计了 Feeds 功能,并采用了 Server-Driven UI (SDUI) 作为通信方式。这种方式允许在不发布移动应用更新的情况下进行本地化内容布局的调整。

背景与目标

2022 年,Reddit 承诺提升用户体验,并在此后进行了多项改进,包括优化发帖体验、可搜索的评论以及更新了版主工具。2023 年的主要目标是通过改进 Feeds 提供更好的用户体验。团队决定从头开始构建新的 Feeds 平台,主要是因为旧架构维护困难。

旧架构的挑战

Reddit 高级软件工程师 Kirill Dobryakov 总结了旧 Feeds 实现中的挑战:

  • Feeds 速度较慢,代码库维护困难。
  • 当前代码库始于 2017 年,当时公司规模较小,经过多年迭代,缺乏架构监督。
  • 难以快速迭代新产品功能。

新架构的设计目标

团队希望新平台能够:

  • 提升功能开发速度。
  • 提供更好的性能。
  • 确保不同设备和界面的一致性。

技术实现

后端改进

  • 保留 GraphQL,但重新设计了 API 响应对象结构。
  • 采用 SDUI,发送客户端需要渲染的精确 UI 元素。
  • 新响应结构将 UI 组件组织成通用单元格组,后端可以控制大部分布局并快速引入新内容元素。

前端改进

  • 替换 iOS 应用中未维护的 Objective-C 代码,改用 Swift 实现。
  • 替换导致难以调试崩溃的 Texture UI 引擎,采用 SliceKit,并使用 Combine 框架。
  • 模块化新代码库,减少构建时间,提高可测试性和测试覆盖率。
  • 使用新的组件库,实现标准化设计系统,确保所有 Feeds 的视觉一致性。

成果

  • 更新的技术栈使代码库更安全、开发更快。
  • 减少 API 响应中的不必要数据,降低延迟,使主 Feeds 加载速度提高 12%。

架构组成

  • 可链接的数据源服务。
  • 并行转换数据模型为视图模型的转换器。
  • SliceKit 中的差异引擎,用于计算如何应用新旧视图模型快照之间的更改。
阅读 27
0 条评论