在后端设计无限滚动列表的最佳方式

The best way to design an infinite scroll list on backend

我正在尝试设计一个支持无限滚动的页面。我们绝对希望它支持 1 个重要功能:如果项目是 changed/deleted,我们希望能够更新已加载的项目。

例如,假设您的 Twitter 主页已加载,其中一条已加载的推文被删除。我们的理想列表需要能够随着变化而更新。

我想到的正常方法是调用 loadTweets(pageNumber = 1) 之类的方法,当用户向下滚动时,pageNumber 递增,然后我们再次调用 API。但这不支持跟踪已加载的项目。

我想到的第一个选择是将其建模为不可变事件流,例如:

  • 项目 1234 已删除
  • 已创建项目 5678 {数据}
  • 项目 1234 已更改 {数据}
  • 已创建项目 9012 { 数据 }
  • 已创建项目 1234 {数据}

(最近的事件在最上面)

您可以使用 pub/sub 机制或将事件流模拟为事件源(例如 RSS 或 ATOM)来实现此目的。 Allamaraju Subrahmanyam 的 RESTful Web Services Cookbook 对后一种选择有一些很好的内容。对于第一个选项,您可能需要参考 Hohpe 和 Woolf 的 Enterprise Integration Patterns

UI 负责解释事件,例如,在新事件出现时删除或更新项目。

除了 Mark 分享的精彩回复外,我还发现 Firebase 非常有效地为我们做了这些事情,下面的视频对此进行了详细解释:

https://www.youtube.com/watch?v=3aoxOtMM2rc&ab_channel=Firebase