# 前端分页查询
# 1、偏移量分页
即传统的分页查询,通过page和limit查询固定尺寸的数据,然后根据后端返回的total来判断是否查询全部数据。能够查询固定的某一页的数据。
优势
简单好实现
支持跳页访问
劣势
基于偏移量的分页在数据量很大的场景下,查询效率会比较低。通常 OFFSET 越高,查询时间就越长。
在并发场景下会出现元素重复(offset在第二页时有人在第一页新插入一个数据)或被跳过(offset在第二页时有人在第一页删掉了一个数据)。
显式的page参数在支持跳页的同时也会被爬虫并发请求。
axios({
url: "/app/product/page",
method: "GET"
params: {
page: this.page,
limit: 20
}
}).then(res => {
const { total, list } = res.data
this.pageList = [...this.pageList, ...list]
if (this.pageList.length < total) {
this.page++
}
})
# 2、游标分页
游标分页,每次查询后后端会返回一个游标key,前端查询下一页数据时把这个游标继续给后端进行查询,第一次不需要传这个key。只能按照顺序往下查,不能查询固定的某一页数据。
优势
性能好,并发安全。
防止被无脑批量爬取。
劣势
后端实现稍复杂。
不支持跳页,比较适合上拉滑动加载更多。
不太适合多检索条件的场景。
axios({
url: "/app/product/page",
method: "GET"
params: {
after: this.after
}
}).then(res => {
const { after, list } = res.data
this.pageList = [...this.pageList, ...list]
this.after = after
})