The big list of Ruby on Rails performance tweaks
So you wrote an app and you think it’s slow. You might be ready to blame Rails or start Googling “why is Ruby dead?”; maybe you’ll think “oh, this is why Twitter stopped using Rails in 2008.”
Don’t worry, it’s not: the Toyota Camry from 2008 is much different than the 2021 Camry.
- Database tweaks
- Server and hardware
- Optimized libraries
Tune your RDBMS
Heroku doesn’t provide for this, but if you’re shipping your own code or using something like HatchBox (which you should be) make sure that your RDBMS is tuned for the hardware its using. The default config does not know anything about your hardware.
PGTune can help you with a low-effort config.
Check for N+1s
Bullet will get you where you need to be.s
Make sure your data is properly indexed
I cannot stress this enough. I have seen too many developers — of all different titles and backgrounds — not know enough about indexing to understand that yes, it does greatly impact performance.
Dead indexes can hurt you. PgHero can help you.
Stop querying all that data
Post.all selects all the columns by default. You probably don’t need all the columns.
Skip ActiveModel unless you need it
ActiveModel is slow for large datasets. By slow, I mean really slow. Skipping it can lead to incredible gains.
Use SQL where SQL can be used
Don’t be using
group will do. Letting your RDBMS do the work is a great place to start optimizing your
And on that note…
Serializing in the database, or at least not from ActiveModel
Cache frequently used objects
Memcached and Redis both provide an easy way to cache things. Rails does too.
Utilize HTTP caching
Rails can do this out of the box. Make sure you’re using it correctly.
Server and hardware
Tune your app server
This one’s easy.
Add some hardware
Rails is a memory-hungry thing.
ActionController::Base for a different stack
You probably don’t need everything
ActionController::Base gives you for every controller. Using Rails as an API?
Using optimized JSON
OJ is a fast JSON parser and object marshaller written in C with Ruby extensions.