5
|
mwilliams · 技术社区 · 15 年前 |
![]() |
1
14
在许多情况下,paginate在计算条目数方面做得非常糟糕,尤其是当涉及到混淆count-sql生成器的连接时。 如果您所需要的只是一个简单的prev/next方法,那么您所需要做的就是尝试从数据库中检索n+1个条目,如果您只得到n个或少于最后一页上的n个条目。 例如:
您可以很容易地将其封装到一些模块中,这些模块可以包含在需要它的各种模型中,或者进行控制器扩展。 我发现这比默认的will-paginate方法效果要好得多。 唯一的性能问题是MySQL的限制,这可能是一个问题,具体取决于表的大小。 无论出于什么原因,在MySQL中执行一个具有小限制的查询所需的时间与偏移量成正比。实际上,数据库引擎读取到特定偏移值之前的所有行,然后返回下一个限制数行,而不是像您预期的那样跳过前面的行。 对于较大的数据集,如果偏移值在100000以上的范围内,您可能会发现性能显著降低。这说明加载第1页非常快,第1000页有点慢,但第2000页非常慢。 |