Optimización de Rails para mortales
Comienza a optimizar el tiempo de carga de tu aplicación en Rals.
Uriel - Desarrollador Web
40% más rápido
Medición
Servidor y la base de datos
Frontend
Recursos adicionales
MEDICIÓN
¿Por qué medir?
Comparar el progreso
Qué optimizar
80% of the output will come from 20% of the input
Herramientas de medición
Rack::MiniProfiler
Complete Guide to Rails Performance
El 20% que produce el 80% del tiempo
en tu código.
Servidor y la base de datos
Actualiza tus versiones de Ruby y de RoR
La base de datos y consultas
Indexes
Falta de índices
~20ms
~10ms
Mal uso de índices
0.0s
2.7s
Agrega índices necesarios
Usa los campos con índices para ordenar/filtrar
Revisa tus índices
lol_dba gem
Contar relaciones
~800ms
~6ms
N+1 queries
Course.all.includes(:my_courses)
Course.all.preload(:my_courses)
Course.all.eager_load(:my_courses)
Bullet
Rack::MiniProfiler
Rack::MiniProfiler
~800ms - 1 query
185ms sin la precarga. ~120 queries
Counts con select
~140ms
Evita N+1 queries
Evalúa las soluciones
Cuenta en un select
Coloca counter caches
Optimizar para el Frontend
Medición en el Frontend.
Consola de desarrolladores.
Rack::MiniProfiler
Activa la compresión de assets.
Gzip
Brotli
Deflate
Entre otros
Archivo | Tamaño Original | Brotli | Gzip |
application.js | 1.1mb | 330kb | 360kb |
application.css | 590kb | 77kb | 79kb |
Para qué NO sirve comprimir assets
Archivos independientes para features de temporada
Evalúa cada nueva librería
Define un límite para el tamaño de tus assets
Revisa periódicamente tus dependencias
Caching local de tus assets
25% de los usuarios no estaba usando el caché
Los archivos duraban máximo 42 horas en el caché
Recursos adicionales
Fin. Muchas gracias 🙏