如何在基于算法的无限滚动中防止重复



这更像是一场阵雨。所以,几乎所有的社交媒体平台都有无限滚动。但它们如何防止复制呢?

假设你用ajax获取内容。例如,当你有一个包含50个条目的静态列表,并且你希望每次用户到达底部时再获取10个结果时,你可以很容易地按例如page:

进行排序。
$.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,以便它可以排除这些视频。

:由于需要交换更多的数据,每次发出新请求时加载时间都会变慢。


这让我回到我开始的地方:他们如何(有效地)防止重复?

即使对分页结果,也可能遇到同样的问题。我一直在网站上,当我点击到第二页,它的结果也在第一页(StackOverflow是一个)。我认为这是一个权衡计算效率和结果质量的决定。我在这里找到的一个简单解决方案是,只需保留用户开始查找的时间戳,然后过滤结果以排除任何更新于该时间的内容,就可以实现此目的。这应该是相对便宜的实现,但这意味着您需要重新加载以获得更多相关信息。考虑到有多少应用程序和网站在工作流程中构建了刷新功能,如果这是标准的方式,我不会感到惊讶。例如,刷新reddit很容易意外,而youtube应用程序在你离开它几分钟后会刷新它的推荐。如果用户期望需要刷新才能获得最新的结果(在我看来,他们有),那么这种有争议的次优解决方案可能是可行的。

最新更新