游标分页是指不用页数作为查询条件,而是用排序的 id 值为条件的分页方式。
页数分页因为用到 offset,在大量数据的时候会产生性能问题。并且页数分页不适合于会变动的、滚动更新的时间线展示(内容会重复或缺失)。
本来我考虑自己写一个,实际写的时候发现要考虑 正序/逆序 * 向前查/向后查 的四个情况,查询条件很容易写乱了。后来一搜有个现成的 gem,就用这个了 https://github.com/xing/rails_cursor_pagination
这个 gem 目前使用的人很少,但代码质量很高,不污染其他对象,文档比代码还多。相比 pagy-cursor 更完善,支持以其他排序字段+id 的联合索引查询。
它的工作原理在 README 里写的很详细,建议阅读 https://github.com/xing/rails_cursor_pagination#how-does-it-work
有需要的可以收藏一下。