瀑布流(无限翻页)带来的问题

比起传统翻页,瀑布流式翻页如今愈来愈火。来看一下区别sql

1. 传统翻页:post

    每次翻页都会从新渲染一个全新的页面,如论坛。blog

    问题:当你翻页时,可能会发现,哎这帖子我刚才在上一页看过啊,这是很正常的,由于帖子通常是按最后一个回复的时间排序的。排序

    解决方法: 无,传统分页就这样。class

2. 瀑布流:渲染

    每次翻页,会把下一页的数据追加到当前页面。分页

    问题: 若是翻页时数据发生变更,将会在同一个页面出现重复数据,想一下前面说的论坛的场景。方法

    解决方法:im

         1. 客户端去重数据

             客户端记录以前加载的数据,在得到新数据后,客户端去重。

             缺点: 去重后数据会少,好比新数据得到10条,其中有2条重复的,最后只加载了8条,且顺序没法保证。

             优势: 服务端代码不用改动。

         2. 修改分页逻辑

             如朋友圈,其是按朋友圈的发布时间排序的,且发布时间永远不可变。所以只需取当前页面最后一条发布时间的下10条数据便可。

             即将

SELECT * FROM posts WHERE username='licong' LIMIT 10

             修改成

SELECT * FROM posts WHERE username='licong' AND publish_time > :time LIMIT 10

         优势: 简单,有效

             缺点: 限制极为苛刻,数据必须按照一个固定不变的属性排序,好比前面说的发布时间。试想论坛这个场景,帖子最后顶帖时间是可变的,若是用这个逻辑去作,会致使有一些帖子永远不可见。