一般的分页请求在云端数据变更时可能遇到请求下来的数据有重复或者遗漏问题。
为了解决这个问题,我总结了几种方法:
客户端时间标记法: 服务端添加列表更新时间,获取返回数据时,客户端判断到数据更新时间不同,则客户端从第一页开始重新请求数据
优点:支持添加数据,删除数据,排序变更
缺点:需要调用多次查询接口,效率低;会变更之前获取的数据,用户可能不好理解
服务端时间标记法: 服务端添加列表更新时间,获取数据时客户端带上原数据更新时间,服务端判断到数据更新时间不同,直接返回第一页到目标页的数据
优点:支持添加数据,删除数据,排序变更;只需要调用一次接口
缺点:列表如果太且目标页数也很大时,效率会很低;会变更之前获取的数据,用户可能不好理解
服务端缓存法: 第一次查询时,客户端缓存时间传0,服务端生成缓存时间,下次查询时带上生成的缓存时间,后端查询数据时,不直接对数据库进行操作,而是查找缓存的数据。
优点:支持添加数据,删除数据,排序变更
缺点:缓存可能消耗较高性能;可能有缓存失效的情况
游标分页法: 数据按插入进行排序(主键查询),每次上传上次查询的最后一个数据的id,返回这个id后的若干条数据
优点:效率高;支持添加数据,删除数据
缺点:不支持排序变更
时间过滤法: 每条数据都添加更新时间参数,查询时客户端上传上次查询的时间,服务端过滤之后时间更新的数据
优点:支持添加数据
缺点:服务端效率低;不支持删除数据与排序变更
客户端过滤法: 客户端过滤重复数据
优点:支持添加数据
缺点:客户端效率低;不支持删除数据与排序变更
一次性下发id法: 一次查询将全部的id列表返回,每次客户端计算出每次要查询的若干个id调用查询详情接口查询,服务端返回他们的对应详情
优点:支持添加数据,删除数据,排序变更
缺点:只适合用于列表不会很大的业务场景