我即将在网络应用程序中开发项目的无限滚动(这只是分页项目的特定用户体验),但我有点困惑如何解决一个用户滚动/页面时添加新项目的问题通过项目。我们如何处理这种不同步的数据?
假设当我打开页面数据库时有 100 个项目。
后端应该发生什么?
这个问题怎么解决?也许甚至在 Stackexchange 网站上,当用户浏览问题页面时,内容会被分页并流缓存发生变化?
这个问题应该问程序员吗?我不确定...
通过提供传统方式不进行分页,最容易解决这个问题
而是提供
这称为键集分页或键查找方法分页。两者通常都需要额外的参数,例如排序和过滤,但这两种技术都是相似的,因此与这个答案无关。
这可以防止在将新项目添加到列表顶部时返回无效页面,但它也有一个缺点,即无法跳转页面(即在我们查看第 5 页时获取第 10 页) 。但这就是为什么在特定场景中使用它的原因,例如无限滚动,在这种情况下,这个问题不存在,甚至不需要。
查看性能比较和有关 按键查找方法的大量解释:
http://use-the-index-luke.com/sql/partial-results/fetch-next-page
所以基本上我们想要做的就是沿着这些思路做一些事情(假设我们按时间顺序以相反的顺序排序,并假设 CreateDate 具有如此高的精度,以至于它被认为是唯一的):
with LastRecord
as (
select CreatedDate
from Records
where Id = @LastRecordId
)
select r.*
from Records r, LastRecord l
where r.CreatedDate < l.CreatedDate
offset 0 rows
fetch first @PageSize rows only;