Contenido del curso

Cómo reducir 932 consultas con Telescope

Resumen

¿Tu API responde, pero no sabes si lo hace bien? La optimización en Laravel responde justo esa pregunta: medir el rendimiento real de cada consulta para detectar cuellos de botella antes de que escalen. Aquí verás cómo instalar Telescope, leer sus métricas y reducir consultas innecesarias en tus controladores.

¿Qué es Telescope y por qué importa en Laravel?

Telescope es la herramienta oficial de Laravel para monitorear lo que ocurre dentro de tu aplicación. Registra solicitudes HTTP, consultas a base de datos, excepciones, eventos, caché y colas, y guarda toda esa información en tablas dedicadas dentro de tu propia base de datos [0:35].

¿Qué hace Telescope exactamente? Intercepta cada acción de tu aplicación (peticiones, queries, errores) y la almacena en tablas como entries, tags y monitoring para que puedas revisarla en una interfaz visual.

La instalación se hace con un par de comandos en la terminal de Visual Studio Code:

  • composer require laravel/telescope para descargar el paquete [1:10].
  • php artisan telescope:install para publicar la configuración.
  • php artisan migrate para crear las tablas que registrarán todo el tráfico.

Después de las migraciones, accedes a la ruta /telescope en tu navegador y ahí empieza el trabajo de auditoría.

¿Cómo detectar consultas ineficientes con Telescope?

Una vez instalado, todo lo que hagas desde Postman u otra herramienta queda registrado. Y aquí aparece lo interesante: lo que parecía funcionar bien, en realidad estaba ejecutando muchísimas más consultas de las necesarias [3:20].

En una prueba real con el proyecto, los números fueron contundentes:

  • Listar todas las categorías: 1 consulta. Correcto.
  • Ver una sola categoría: 23 consultas. Problema.
  • Listar etiquetas: 932 consultas. Problema serio.
  • Listar recetas: 4 consultas. Correcto.

Ese salto de 1 a 932 consultas es el síntoma clásico del problema N+1: por cada registro padre, Laravel ejecuta una consulta extra para traer su relación. La aplicación responde, sí, pero el rendimiento se hunde a medida que crece la base de datos.

¿Qué es el problema N+1 en Laravel? Ocurre cuando consultas un listado y, por cada elemento, se lanza una consulta adicional para obtener sus relaciones. Si tienes 100 etiquetas con recetas, terminas haciendo 101 consultas en lugar de 2.

¿Cómo optimizar consultas con eager loading?

La solución pasa por decirle explícitamente a Eloquent qué relaciones queremos cargar junto con el modelo principal. Esto se conoce como eager loading y se aplica con el método with() directamente sobre la consulta [5:40].

En el controlador de etiquetas, en lugar de pedir simplemente las recetas, indicamos que vengan acompañadas de su categoría, sus etiquetas y su usuario:

php $etiquetas = Etiqueta::with(['recetas.categoria', 'recetas.etiquetas', 'recetas.usuario'])->get(); return EtiquetaResource::collection($etiquetas);

Al recargar la petición en Postman y revisar Telescope, el resultado cambia de forma drástica: de 932 consultas a solo 5 [7:15]. La misma respuesta, el mismo dato, pero con un costo casi nulo para la base de datos.

Esta misma lógica se replica en otros controladores:

  • En el controlador de una sola etiqueta, aplicar with() reduce las consultas a 5.
  • En el controlador de categoría individual, cargar receta con su categoría, etiquetas y usuario también baja a 5 consultas.
  • En el listado general, asignar la consulta a una variable mejora la lectura del código y mantiene la optimización.

¿Qué guardan las tablas que crea Telescope?

Cuando ejecutas la migración de Telescope, no se crea una sola tabla, sino un conjunto de estructuras pensadas para clasificar la información [9:30].

  • Tabla de entradas (entries): almacena el detalle de cada evento HTTP, consulta SQL, cola, excepción y error.
  • Tabla de etiquetas (tags): clasifica y asigna estados a la información registrada para filtrarla con facilidad.
  • Tabla de monitoreo: guarda métricas de rendimiento útiles cuando trabajas con funciones en tiempo real, como un chat.

Esta separación permite que la interfaz de Telescope te muestre cada tipo de evento por separado: requests, queries, cache, events, exceptions, entre otros.

¿Telescope sirve solo para consultas SQL? No. Aunque aquí lo usamos para auditar queries, también monitorea caché, eventos, excepciones, jobs y notificaciones. Es un panel completo del comportamiento interno de tu app.

¿Qué buenas prácticas adoptar al optimizar?

La optimización no es un paso final, sino un hábito mientras desarrollas. Cada vez que crees un endpoint nuevo, abre Telescope y revisa cuántas consultas dispara. Si el número crece de forma proporcional a los registros, tienes un N+1 esperando explotar.

Algunas prácticas que se desprenden de la clase:

  • Usar with() para precargar relaciones siempre que el recurso las exponga.
  • Asignar la consulta a una variable antes de devolverla para mejorar la lectura del controlador.
  • Revisar Telescope después de cada cambio para confirmar que el número de consultas no se dispara.
  • Aplicar la misma lógica de optimización a todos los controladores que comparten relaciones.

La idea de fondo es simple: una consulta optimizada cumple con el mejor rendimiento posible sin sacrificar el resultado. Y aunque Telescope es exclusivo de Laravel, casi todo framework profesional cuenta con su propia herramienta de monitoreo equivalente.

¿Con qué tecnología trabajas tú y qué herramientas usas para auditar el rendimiento? Cuéntalo en los comentarios.

      Cómo reducir 932 consultas con Telescope