首页
/ Pagy:轻量级且高效的Ruby分页库

Pagy:轻量级且高效的Ruby分页库

2024-08-26 18:12:05作者:殷蕙予

项目介绍

Pagy 是一个极其高效且功能全面的 Ruby 分页宝石,旨在解决大数据集的分页需求。与其他流行的分页工具如 WillPaginate 和 Kaminari 相比,它在性能上表现出色,消耗的资源远少。它支持 Rack 框架(包括 Rails、Sinatra 和 Padrino 等)以及纯 Ruby 环境,并能适应任何ORM、数据库或搜索库。Pagy 提供了对多种CSS框架的支持,如 Bootstrap,以及针对特殊场景的扩展,比如集成Elasticsearch。

项目快速启动

要开始使用 Pagy,首先确保你的环境中已经安装了 Ruby,并且通过以下命令添加 Pagy 到你的 Gemfile 中:

gem 'pagy'

之后,执行 bundle install 来安装。接下来,在你的应用程序中初始化 Pagy 并进行基本分页。以 Rails 应用为例,假设你想对产品列表进行分页:

# 在控制器中
def index
  @pagy, @products = pagy(Product.all)
end

# 在视图中
<%== pagy_nav(@pagy) if @pagy.pages > 1 %>
<ul>
  <%= @products.each do |product| %>
    <li><%= product.name %></li>
  <% end %>
</ul>

如果你想使用 Bootstrap 样式的导航,只需在初始化时加入对应的额外组件:

require 'pagy/extras/bootstrap'

并在视图中使用 pagy_bootstrap_nav(@pagy) 替换普通导航。

应用案例和最佳实践

Keyset Pagination

对于处理大量数据,采用 Keyset Pagination 是一种明智的选择,Pagy 自版本9.0起提供了这一特性,尤其适用于大数据集合的高效率滚动。这避免了传统的基于偏移量的分页带来的性能瓶颈。

# 假设我们有一个排序条件
@pagy, @products = pagy(Product.order(:created_at), vars: [:sort])

无计数分页(Countless)

当你处理的数据集合极大以至于计算总数变得昂贵时,可以利用 Pagy::Countless 特性。

典型生态项目

Pagy 的生态系统允许与各种环境和库无缝集成,例如 Elasticsearch

require 'pagy/extras/elasticsearch_rails'
extend Pagy::ElasticsearchRails

def search
  response = Article.search(params[:query], page: pagy_page, per_page: pagy_items)
  @pagy, @articles = pagy_elasticsearch_rails(response)
end

此外,Pagy 还支持客户端分页、无限滚动等现代交互模式,通过提供 JavaScript 辅助方法和示例,使开发者能够轻松实现这些高级功能。


以上就是关于 Pagy 的简明快速入门及一些进阶实践概览。深入探索其详细文档,将帮助你充分利用这个高效分页解决方案来优化你的应用程序。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
24
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
271
2.56 K
flutter_flutterflutter_flutter
暂无简介
Dart
561
125
fountainfountain
一个用于服务器应用开发的综合工具库。 - 零配置文件 - 环境变量和命令行参数配置 - 约定优于配置 - 深刻利用仓颉语言特性 - 只需要开发动态链接库,fboot负责加载、初始化并运行。
Cangjie
183
13
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1
cangjie_runtimecangjie_runtime
仓颉编程语言运行时与标准库。
Cangjie
128
105
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
357
1.86 K
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.02 K
443
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.03 K
606
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
732
70