写点什么

分页方式,看这一篇就够了。

用户头像
大伟
关注
发布于: 2021 年 02 月 01 日
分页方式,看这一篇就够了。

 对于前端展现来说,如果一个页面中需要展现的数据条数过多,就必须设计分页查询功能,最常见的做法是采用 pageIndex 和 pageSize 参数来一页一页的拉取数据。


  然而实际的业务情况往往要复杂的多,一旦在分页过程中,原有数据的条数或者排序发生变化,就无法按照原有的页码获得相应的数据。


  简单总结,分页方式一般有如下四种情况:

 

第一种情况 -- 最简单的情况

  • 特征:新增数据出现原有数据的尾部,不影响原有各页数据的页码。

  • 典型示例:时间正序分页查询

  • 分页方案:这是一种最简单的情况,用 pageIndex+pageSize 即可顺序获取每页数据,无需特殊处理。

  • 备注:这种理想情况比较少见



第二种情况 -- 稍微复杂一点

  • 特征:新增数据增加于原有数据的前面,影响原有各页的页码

  • 典型示例:时间倒序分页查询

  • 分页方案:不要使用 pageIndex 参数来获取分页数据,而是为每个数据项增加一个排序标识字段 pageStamp,里面存储一个有序的唯一标识,例如 timestamp 值。换页时根据上次取到的分页数据最后一个项目的 pageStamp,继续向下获取小于这个 pageStamp 的 n 条数据。这个方案的优点在于,如果有需要,还可以根据上次取得的分页数据的第一个项目中的 pageStamp 标识,向上方获取大于该 pageStamp 的 n 条数据。

  • 备注:返回评论列表,回复列表等时间逆序的数据时很有用。



第三种情况 -- 借助于类似于缓存的版本机制

  • 特征:数据排序定时变化,每次重排,各页数据全变

  • 典型示例:热度排行榜;数据源分散,需要先汇总后排序的数据列表。

  • 分页方案:每次排序结果都保留,以 pageStamp 标识版本。取第一页数据时,前端获得这个 pageStamp 标识。换页过程中把这个版本标识继续传递给服务端,只获取该版本的分页数据,也就不会分页混乱。

  • 备注:这种方式理论上可以适用于任何情况,但是如果数据条数很多,一般会根据业务需求指定一个限制,每个版本的排序数据中只保留固定的条数。一般情况下,不需要长期保留所有版本的数据,采用类似于缓存的过期机制处理即可。



第四种情况 -- 无法采用任何正常的换页方案

  • 特征:数据排序实时变化,无法用页码分页。

  • 典型示例:可以实时更新排序的用户个性化推荐引擎。

  • 分页方案:存储曾经给该用户展示过的数据列表,作为过滤依据。从当前最新排序数据中,获得过滤列表以外的、足够条数的数据返回。

  • 备注:*必须* 根据业务特点,慎重设计过滤列表的存储方案,过滤方式等,谋求资源和性能上的最佳比例。



根据业务数据的特性,可以从上述四种方式中选择一种合适的方式进行分页参数的设置。


用户头像

大伟

关注

码龙战BUG于野。 2020.05.21 加入

还未添加个人简介

评论

发布
暂无评论
分页方式,看这一篇就够了。