3

典型的 Rails 分页 gem 的问题在于它执行 2 个查询:一个用于您所在的页面,一个用于总计数。当您不关心有多少页时(例如,在无限滚动中),第二个查询是不必要的(只需在第一个查询中的 LIMIT 子句中添加 1,您就知道是否有更多)。

有没有第二个查询可以进行分页的宝石?当在大型数据集的 WHERE 子句中应用非索引过滤器并且索引我所有的各种过滤器时,第二个查询是昂贵的,因为我需要快速插入。

谢谢!

4

2 回答 2

1

弄清楚了。使用 will_paginate gem 时,您可以将自己的 total_entries 选项提供给 AR:Base.paginate。这使得第二个查询不会运行。

这适用于您只关心最近条目的足够大的数据集。

如果您实际上希望到达列表的末尾,这不一定可以接受,因为如果列表大小可以被 per_page 整除,您将在最后一个查询中查询一个空集。有了无尽的滚动,这很好。使用手动“加载更多”按钮,当没有更多要加载的项目时,您将在最后显示“加载更多”。

于 2011-08-13T06:10:12.837 回答
0

正如您所确定的,标准方法是在需要 N 条记录时获取 N+1 条记录,如果您在响应中获得超过 N 条记录,则至少可以显示一页额外的结果。

您想要进行显式COUNT(*)调用的唯一原因是您是否需要具体了解您还需要获取多少条记录。在某些引擎上,这可能需要花费大量时间来计算,因此最好避免使用,尤其是在从未直接使用该值的情况下。

由于这很简单,您真的不需要插件来完成它。像这样的插件will_paginate更关心可用页面的数量,因此它会进行计数操作。

于 2011-08-12T21:31:04.113 回答