Luciano Ezequiel Soto Bonja
Estoy trabajando con NestJS, y el que voy a probar es nestjs-pino.
Mi consulta es que si pobla en la base de dato toda esa inforamcion puede como saturar de tantas peticiones?
¿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:
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:
with() reduce las consultas a 5.¿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].
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:
with() para precargar relaciones siempre que el recurso las exponga.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.
Luciano Ezequiel Soto Bonja
Estoy trabajando con NestJS, y el que voy a probar es nestjs-pino.
Mi consulta es que si pobla en la base de dato toda esa inforamcion puede como saturar de tantas peticiones?
Sebastian Pérez
Existe tambien la herramienta de laravel/debugbar, es muy buena tambien.
Harold German Granados Guerrero
en category, tags, y user, muestra created_at, updated_at, email_verified_at.. Me parece que se deberia quitar esos, campos por que por ejemplo para un usuario que lleva datos personales, cualquier persona podria verlo, solo por que esta treyendo todos los campos de usuario.
"user": { "id": 24, "name": "Newton Weber", "email": "leila.jaskolski@example.org", "email_verified_at": "2023-10-29T14:55:38.000000Z", "created_at": "2023-10-29T14:55:39.000000Z", "updated_at": "2023-10-29T14:55:39.000000Z" }
Platzi
Es importante tener en cuenta la seguridad de los datos personales. En este caso, se deberían quitar los campos 'email_verified_at', 'created_at' y 'updated_at' del objeto 'user' para evitar que cualquier persona pueda verlos.
Kenneth Angulo L
Efectivamente companero, para ello usamos la tecnica vista un par de clases atras 'Resource'.
Si generas un UserResource, puedes controlar que datos (campos) mostrar.
Ahora bien, hay otras tres formas de esconder los datos si no deseas usar Resources, cheka este link:
yessica Pérez
que es Apis?
Platzi
API es la estructura y el conjunto de principios y convenciones para acceder a recursos, como por ejemplo a través de verbos HTTP y rutas pero con una estructura diferenciada de una base de datos.
Kenneth Angulo L
Application Programming Interface
Esto de manera simple es un tecnica para comunicar y compartir datos entre aplicaciones. Generalmente en formato JSON.
Ejemplo, hice un app para el celular que muestra pokemones. Pero ya existe un repositorio en la nube que tiene a los pokemones organizados.
Entonces me conecto con su API y le digo mostrarme la info del pokemon 'Z' (peticion GET), la applicacion en la nube responde con un JSON que contiene toda la info del pokemon 'Z'
Fredy Max Chavez Loyola
Para poner mi proyecto a producción desinstalo el paquete? o solo se daja así?
Platzi
No es necesario desinstalar el paquete, simplemente se deja así. El paquete instalado es necesario para configurar y servir el proyecto en producción.
Kenneth Angulo L
En produccion como imaginaras es un gran riesgo de seguridad dejar expuesta una herramienta como telescope.
En la documentacion: Local Only Installation nos dan unas pautas para controlar que telescope solo se active en modo local (ver configuracion de AppServiceProvider) y agregar la clave "dont-discover" en el composer.json
Y finalmente a titulo personal, pues controlar las rutas, las proteges con el respectivo middleware solo para administradores o personal de IT.
Sara Elissa Duran Camacho
hice el migrate exitoso, pero al ir a la ruta /telescope me sale 404 :c ya le hice php artisan cache:clear y nada
Harold German Granados Guerrero
Es posible hacer uso de teslecope desde un hosting compartido ?? Por que ya lo intente y me da error de vendor :( . Seria buenisico hacer uso en produccion por que si lo clientes tiene problema podria facilmente ver telescope.
Mario Azcunaga Veiga
Tienes que instalar la dependencia en tu hosting
Harold German Granados Guerrero
No se por que en etiquetas le dura 62ms, muy rapido, mientras a mi se 6447ms. Es demasiado tiempo para obtener respuesta, si tengo el mismo codigo :(
Hector Vasquez
depende de muchas cosas:
Edinson Rodríguez
que herramienta similar hay para spring?
Gilberto Pérez Garrido
Otra manera es usar ->paginate() en las consultas para optimizar
Gilberto Pérez Garrido
recuerden hacer
php artisan clear:cache && php artisan cache:clear
si les sale 404
Iván González Mendoza
Que gran herramienta. La desconocía por completo. Resulta muy útil para facilitar la optimización y seguimiento de ejecución de una consulta.
Juan Pablo Campuzano Monsalve
¿Al momento de subir a producción esta herramienta se deshabilita automáticamente o tenemos que especificar su configuración?
Jesusamado Salvador Llica García
Esta clase es vital para un desarrollo profesional. Había olvidado lo importante que es utilizar las herramientas que el propie framework nos ofrece.