【发布时间】:2021-05-20 18:40:57
【问题描述】:
这更像是一个淋浴的想法。因此,几乎所有社交媒体平台都有无限滚动。但是它们如何防止重复呢?
所以,假设您使用 ajax 获取内容。例如,当您有一个包含 50 个项目的静态列表,并且您希望每次用户到达底部时再获取 10 个结果,您可以轻松地按例如页面:
$.ajax(
url = "mysite.api/content?page=2"
...
)
但是对于像 YouTube 这样的网站,您的推荐可能每秒钟都在变化,并且无法按页面对结果进行排序。例如。如果我想获取 YouTube 起始页的内容,它看起来像
$.ajax(
url = "youtube.api/start?user=aXqq1...&page=1"
...
)
但是,当我进一步滚动时,YouTube 会获取另一个页面,该算法可能已经推荐了不同的视频,或者使用了其中的一些视频,因此可能会出现重复的视频。所以这不是一个选择,我真的很喜欢他们如何防止它。
我目前的想法是:
1。网络套接字:
YouTube 查询一次视频内容,然后每次滚动到底部时从预加载列表中加载更多内容。
问题:YouTube 不知道我会滚动多远。这意味着他们要么存储大量视频推荐,要么在 500 个视频之后执行新查询,这将再次导致重复问题。
2。在 ajax 请求中包含已列出的视频
每次获取新视频时,YouTube 都会将视频列表(已加载)发布回 API,以便排除这些视频。
问题:每次发出新请求时,加载时间都会变慢,因为需要交换更多数据。
这让我明白了我的出发点:他们如何(有效地)防止重复?
【问题讨论】:
标签: ajax algorithm youtube infinite-scroll