比起传统翻页,瀑布流式翻页如今愈来愈火。来看一下区别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
优势: 简单,有效
缺点: 限制极为苛刻,数据必须按照一个固定不变的属性排序,好比前面说的发布时间。试想论坛这个场景,帖子最后顶帖时间是可变的,若是用这个逻辑去作,会致使有一些帖子永远不可见。