关于web分页展示功能的设计

本文探讨了传统分页API的局限性,提出了一种新的分页策略,确保新数据插入时仅影响首页,提高性能和用户体验。通过将数据填充至所有页面并保持后续页面稳定,文章介绍了如何利用缓存和API设计改进数据获取效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页展示功能是web中最常见的功能之一

传统的api设计方法是把所有数据排序,并按pageSize分成若干段,根据传入参数page取对应的分段的数据

乍一看,这个设计很传统,也很自然,没毛病

但是仔细研究后,发现这种设计无论从性能还是人性化方面,都有毛病

我们来考虑一个常用场景,新数据在不断加入,如分页展示一个论坛主题数据

数据按时间戳排序,肯定是希望最新的数据在第一页展示,即新数据在列表头部不断加入

按照传统设计,当数据集发生变化,则重新刷新页面,所有页面的数据都会发生变化,这就像从vector头部不断插入数据,所有旧数据都需要往右移动一个单元格一样

这样设计api带来两部分问题:

  1. 由于所有页面数据不停在变,想要通过缓存页面数据的方式来加速数据响应时间是不可能实现的
  2. 设计爬虫程序,永远没法一次遍历所有page实现抓取完整数据集的需求

 

基于以上不足,需要设计一种更科学的分页方法

将数据排序后,从后往前排满所有页面,第一页直接取前pageSize条数据

由于第一页实际分到的数据条数在[1,pageSize]范围内,所以直接取前pageSize条,会造成第一页与第二页可能有[0,pageSize-1]条重复数据

由于重复数据是已知的,从页面展示上把第一页重复数据分开来是很容易的

那么从用户体验上,除了默认打开的第一页会有部分重复数据,任何时候打开其他页面,不管如何刷新,该页数据都是固定不变的(新增页面页面号变化先忽略)

这样带来的好处是

  1. 新数据的加入,只会影响第一页展示的数据发生变化
  2. 任何时候,只要从最后一页往前请求api,就一定能正确获取到完整的数据集

由于页面数据被固定下来,后台根据用户访问热点,将部分热点页面数据直接缓存起来,加速下一次该页面的数据请求,变得相当容易

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值