Pagy
rack-mini-profiler
Pagy | rack-mini-profiler | |
---|---|---|
10 | 21 | |
4,464 | 3,656 | |
- | 0.4% | |
9.6 | 7.5 | |
6 days ago | 3 months ago | |
Ruby | Ruby | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Pagy
-
Build Load More Pagination with Pagy and Rails Hotwire
Now, let's dive into the pagination part of this post: setting up Pagy for handling pagination in our Rails application. If you haven't included the Pagy gem in your project, you'll need to add it manually. Here's how you can do it:
-
Pagination in Rails with Pagy gem
Several gems are available for pagination in Rails, but the Pagy gem is one of the most popular and efficient. It is a fast and lightweight library that provides a simple and flexible API. In this article, we’ll explore how to use it to implement pagination in Rails.
-
Rux: A JSX-inspired way to render view components in Ruby
> Am I understanding correctly that there’s a significant difference in performance between using a ViewComponent + a partial vs. a ViewComponent which renders html via a tag - from inside the component?
I don't think there will be much difference at all in everyday use, but some libraries that value performance don't avoid templates for that reason, Pagy for example.
https://github.com/ddnexus/pagy
Personally I omit them in my projects whenever we want to customise attributes, I hate seeing stuff like this in templates:
Some header
-
A powerful search feature with what Rails provides out of the box
The next step was about backporting the templates, adding Pagy gem for handling pagination and creating the controller. I was then able to show the listings with the models, but the filtering was not working.
-
The Ultimate Search for Rails - Episode 1
On the backend, we'll need a few tools. Apart from the classics (ActiveRecord scopes and the pg_search gem), you’ll see how the (yet officially unreleased but production-tested) all_futures gem, built by SR authors, will act as an ideal ephemeral object to temporarily store our filter params and host our search logic. Finally, we’ll use pagy for pagination duties.
-
My project: railstart app
Pagination
-
Pagination and infinite scrolling with Rails and the Hotwire stack
In our application, we will use Pagy to implement pagination. Let’s install Pagy now, following along with the Pagy quick start guide.
-
Load More Pagination in Rails with Hotwire Turbo Streams
For pagination I tend not to use gems like pagy or kaminari, instead implement this functionality just using limit and offset.
-
Ten Ruby gems for Rails you should definitely know about
Kaminari hooks onto ActiveRecord associations and makes it super easy to page them. Pagy is another option that seems to have a solid API but I haven't tried it yet.
-
Re-Wheel series part 1 - How does Rails' find_each work?
But how is this implemented? Well, if you use pagination in your index methods with gems like pagy, kaminari or will_paginate you will find that the same idea is happening here, they are using the power of SQL's LIMIT and OFFSET to fetch only a portion of the data each time. So in the 1 million users example, find_each will perform 1000 thousand queries with a limit of 1000 while changing the offset properly so we don't miss any record.
rack-mini-profiler
-
RoR Debugbar
Author of peek here. Honestly, I got burnt out. We stopped using this internally at GitHub which made it difficult to continue working on. Rails was going through its identity crisis with asset pipelines.
https://github.com/MiniProfiler/rack-mini-profiler gets you most of the way there and comes by default in the Gemfile for new Rails applications.
-
For RoR, see in production every method call, parameter and return value
This already exists to some degree: https://github.com/MiniProfiler/rack-mini-profiler
- How to reduce memory usage for your Rails app - R14 - Memory Quota Exceeded in Ruby (MRI)
- benchmark sql queries in an action?
-
A Trick For Reading Flamegraphs
rack-mini-profiler will generate flamegraphs for Rails backend requests.
-
How to make Turbo frames load faster?
Have you tried using https://github.com/MiniProfiler/rack-mini-profiler to get a clear breakdown of where your server is spending it's time filling the requests? If rack-mini-profiler is too much for you to deal with right now, you can still get a good idea just using the https://github.com/ruby/benchmark gem and wrapping some of your requests in a benchmark.
-
Active_storage first time need help!
# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main" gem "rails", "~> 7.0.4" # The original asset pipeline for Rails [https://github.com/rails/sprockets-rails] gem "sprockets-rails" # Use sqlite3 as the database for Active Record gem "sqlite3", "~> 1.4" # Use the Puma web server [https://github.com/puma/puma] gem "puma", "~> 5.0" # Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails] gem "importmap-rails" # Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev] gem "turbo-rails" # Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev] gem "stimulus-rails" # Build JSON APIs with ease [https://github.com/rails/jbuilder] gem "jbuilder" # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ] # Reduces boot times through caching; required in config/boot.rb gem "bootsnap", require: false # Use Sass to process CSS # gem "sassc-rails" # Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images] # gem "image_processing", "~> 1.2" group :development, :test do # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem gem "debug", platforms: %i[ mri mingw x64_mingw ] end group :development do # Use console on exceptions pages [https://github.com/rails/web-console] gem "web-console" # Add speed badges [https://github.com/MiniProfiler/rack-mini-profiler] # gem "rack-mini-profiler" # Speed up commands on slow machines / big apps [https://github.com/rails/spring] # gem "spring" end group :test do # Use system testing [https://guides.rubyonrails.org/testing.html#system-testing] gem "capybara" gem "selenium-webdriver" gem "webdrivers" end
- What are the main suspects in a really slow Rails app?
-
My project: railstart app
rack-mini-profiler
-
Troubleshooting a RoR Application in Production
For a quick ad hoc peek at the performance of pages that you can request yourself, without having to go through the hoops of connecting to and committing to an external service, this gem can also be useful: https://github.com/MiniProfiler/rack-mini-profiler
What are some alternatives?
Kaminari - ⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps
bullet - help to kill N+1 queries and unused eager loading
will_paginate - Pagination library for Rails and other Ruby applications
ruby-prof - A ruby profiler. See https://ruby-prof.github.io for more information.
order_query - Find next / previous Active Record(s) in one query
Peek - Take a peek into your Rails applications.
tailwindcss-rails
Derailed Benchmarks - Go faster, off the Rails - Benchmarks for your whole Rails app
strong_migrations - Catch unsafe migrations in development
benchmark-ips - Provides iteration per second benchmarking for Ruby
phony_rails - This Gem adds useful methods to your Rails app to validate, display and save phone numbers. It uses the super awesome Phony gem (https://github.com/floere/phony).
perftools.rb - gperftools for ruby code