假如记录数量非常巨大,有几十万甚至上百万
分页诸如/page/N 这样的链接地址,好处在于(我认为),易于 seo,并且有现成插件
但是我发现这种分页形式对于数据库、缓存来说并不友好
数据库方面:pagination 主要使用的 sql 的 limit [offset], rows,而 limit 的方式是取出 offset 之前的记录再抛弃掉,所以对于大页码来说性能是有损害的。
缓存方面,一般我们使用的都是从最新往后翻页,一页显示 X 条记录,当有新的记录出现的时候,会形成连续反应,后面的页面全都缓存失效
用户体验方面,如果出现新的记录,老的记录会被顶到后面,那么在翻页的时候,经常可以看到之前已经看到过的文章,对于用户来说很不爽。
如果使用偏移量,比如 domain.com/articles/s/N 这种形式,则可以解决以上三种问题。 如果是按 id 排序,那么就是 where articles.id < N limit rows
翻页过程中的用户,可以保持原来的翻页链接,并且能够使用缓存,如果有新记录,也不会影响翻页的体验。
但这样的坏处可能在于 SEO 上出现太多页面
有没有朋友来讨论一下
如果是新闻或新闻评论,用偏移量体验比较好。这种都是看一次就不再看的时效性内容。论坛的帖子有时候会收藏然后时不时翻出来看看,还是用分页比较好,想看哪页看哪页
理解错楼主的本意了 -_-|||
现在已经进入 big data 的时代了,第二种方案优势更明显,使用基于偏移量分页的貌似越来越多。,而且我个人认为体验要优先于 seo,且 seo 的最终目标也是为体验服务。
TimYang 老师有一篇关于分页的文章供参考: 用 Twitter 的 cursor 方式进行 Web 数据分页
在数据比较多时,采用偏移量应该合适一些。设计缓存时确实得细心一些了。
#14 楼 @zhangyuan #15 楼 @ShiningRay 弱弱的问一下,为什么文章的结尾说“此方法缺点是翻页时必须连续,不能跳页。”? 每一页的 cursor_id 应该可以计算的啊
@ShiningRay 我觉得可以先用 limit
、offset
找出 id,然后在通过 id 查询分页结果,这样似乎折中了下,大数据量的时候应该比传统的 paginate
好一些