Contenido del curso

Manos a la obra con nuestro proyecto

Cómo detectar el problema N+1 en Laravel

Resumen

Cuando tu proyecto en Laravel ya funciona, queda un paso que muchos olvidan: medir el rendimiento. Optimizar consultas en Laravel con Debugbar te permite detectar cuellos de botella antes de que tu aplicación crezca y empiece a fallar con miles de registros.

¿Qué hace Laravel Debugbar y por qué instalarlo?

Laravel Debugbar es un paquete de terceros que añade una barra de depuración al pie de tu aplicación. Esa barra muestra cuántas consultas SQL se ejecutan, cuánto tardan y dónde ocurren. Con esa información, tomas decisiones informadas en lugar de optimizar a ciegas.

La instalación es directa desde la terminal:

bash composer require barryvdh/laravel-debugbar --dev

El flag --dev indica que solo lo necesitas en el entorno de desarrollo, no en producción.

¿Para qué sirve Laravel Debugbar? Para visualizar en tiempo real el número de consultas SQL, su tiempo de ejecución y el origen del código que las dispara. Es una herramienta de diagnóstico, no de producción.

¿Cómo activo o desactivo la barra de depuración?

El control vive en el archivo .env. Cuando la variable de depuración está en true, la barra aparece. Si la pones en false, desaparece. Así mantienes el flujo limpio cuando presentas la app y lo activas cuando necesitas inspeccionar.

¿Por qué aparecen 18 consultas en lugar de 3?

Aquí viene lo interesante. Al mostrar el nombre del usuario creador de cada publicación en el home con post->user->name, las consultas saltaron de 3 a 18. Ese salto es una señal clara del problema N+1: por cada publicación impresa en la vista, Laravel lanza una consulta extra para traer al usuario relacionado.

Con pocos registros pasa desapercibido. Con 5000 registros, el rendimiento se desploma.

¿Qué es el problema N+1 en Laravel? Es cuando ejecutas una consulta principal y, por cada resultado, se dispara una consulta adicional para traer datos relacionados. Si tienes 17 publicaciones, terminas con 1 + 17 = 18 consultas en vez de solo 2.

¿Cómo soluciono las consultas en la vista?

La raíz del problema es que las consultas se estaban haciendo en la vista, no en el controlador. La solución es eager loading: indicar al controlador que, al traer los artículos, incluya desde el inicio la información de los usuarios relacionados.

En lugar de dejar que cada iteración de la vista pida al usuario por separado, el controlador entrega una consulta completa. El resultado: regresas a un número mínimo de consultas y la vista solo imprime datos ya cargados en memoria.

La regla práctica que deja esta lección:

  • Las consultas siempre deben originarse en el controlador.
  • La vista solo debe consumir datos, nunca pedirlos.
  • Si ves un número de consultas que crece con cada registro, sospecha de N+1.

¿Dónde encuentro más componentes de terceros para Laravel?

El ecosistema de paquetes de Laravel es enorme y se explora desde repositorios públicos donde puedes filtrar por palabra clave: Excel, PDF, debug o el nombre del framework. Cada componente trae su propia documentación con ejemplos de instalación, activación y uso.

Esa práctica de buscar e integrar paquetes externos es lo que convierte un proyecto sencillo en uno escalable. Vas sumando funciones pequeñas, como la barra de depuración o un icono de usuario, sin reinventar la rueda.

Detalles de diseño que acompañan la optimización

Mientras optimizas el backend, también puedes pulir la vista. En el home, junto al nombre del autor, se añadió un contenedor con utilidades de Tailwind:

  • Texto pequeño en color gris con opacidad de 75.
  • Contenedor flex con items-center y un gap de nivel 1.
  • Un icono de usuario de 4 unidades de alto y ancho, tomado de una librería pública.

Estos detalles parecen menores, pero refuerzan la idea central: un proyecto profesional cuida diseño, versiones y rendimiento al mismo tiempo. Descuidar uno te pasa factura tarde o temprano.

¿Qué te llevas de este bonus de optimización?

Instalar Debugbar, leer el contador de consultas y mover la lógica de la vista al controlador son tres movimientos que cambian el comportamiento de tu aplicación bajo carga. No esperes a tener miles de registros para descubrir que tu home tarda en responder.

Practica este flujo en tu propio proyecto: mide antes, ajusta el controlador con eager loading, mide después. ¿Qué diferencia de consultas obtuviste tú al aplicarlo? Cuéntalo en los comentarios.

      Cómo detectar el problema N+1 en Laravel