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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

这样带来的好处是

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

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

你可能感兴趣的:(系统设计,web设计,分页展示)