Scoprire il problema N+1 in modo sistematico
Ecco un flusso pratico di debug N+1 con Telescope. Non ci si limita ad accorgersi che “la stessa SELECT si ripete”, ma si effettua un intero workflow che include anche la verifica dopo la correzione.Trova le richieste lente in Requests
Apri
/telescope e individua nel tab Requests le richieste con tempo di esecuzione elevato.Verifica in Queries l'SQL emesso
Aprendo il dettaglio della richiesta vedi tutte le query SQL eseguite. Se SELECT simili si ripetono, è un N+1.
dd() o log di debug nel codice.
Tracciamento di richieste specifiche con i tag
Telescope ha una funzionalità di tag. ConTelescope::tag() puoi aggiungere tag arbitrari alle entry e filtrarle rapidamente dal filtro della dashboard.
È molto utile quando vuoi seguire solo le operazioni relative a un certo ID utente o ID ordine.
user:42 nella Search della schermata /telescope/requests, vedi solo le richieste dell’utente con ID=42.
Assegnare automaticamente tag ai modelli
Nel metodotags di TelescopeServiceProvider puoi assegnare a tutte le entry uno specifico ID di modello.
HasTags sul modello, quando questo viene registrato vengono assegnati automaticamente i tag.
Uso del Dump watcher
Usandodump(), l’output può mescolarsi nella risposta HTML rendendo difficile il debug delle API. Con il Dump watcher di Telescope puoi separare l’output di dump() dalla risposta del browser e registrarlo nella dashboard.
L’uso è semplice: apri il tab “Dump” di /telescope e chiama dump().
dd() non blocca l’esecuzione dell’app, quindi è utile per fare debug lasciando fluire più richieste consecutive.
Debug email agevole con l’integrazione Mailpit
Combinando il Mail watcher con il server SMTP locale Mailpit puoi migliorare notevolmente il flusso di sviluppo delle email.Debug di eventi e listener
Il debug di implementazioni event-driven è spesso difficile. Seguire nei log “l’evento si è attivato?” o “quale listener è stato invocato?” è tedioso. Con l’Events watcher di Telescope vedi in elenco gli eventi emessi e i loro listener. Se un listener non viene invocato, verifica l’entry dell’evento nel tab Events.- L’evento è emesso ma non compare il listener → il listener non è registrato (verifica
EventServiceProvider) - L’evento stesso non è emesso → verifica il punto di chiamata di
event()
Debug dei job in coda
Nel debug di elaborazioni asincrone è difficile risalire alla causa guardando solo i log. Il Jobs watcher di Telescope registra dal dispatch del job al risultato dell’esecuzione. Cliccando sull’entry di un job fallito vedi stack trace e messaggio dell’eccezione. Oltre alla tabellaqueue:failed, la verifica su Telescope permette di individuare rapidamente la causa del fallimento.
Debug dei client HTTP
Quando fai debug di comunicazioni con API esterne, l’HTTP Client watcher è utile. Vengono registrate le richieste eseguite tramite la facadeHttp:: e le relative risposte.
dd($response->json()).
Conclusioni
| Tecnica | Vantaggio |
|---|---|
| Workflow N+1 | Individua e correggi sistematicamente i problemi delle query senza dd() |
| Tag | Filtra subito i record di uno specifico utente o modello |
| Dump watcher | Verifica l’output di dump senza inquinare la risposta API |
| Integrazione Mailpit | Sviluppo email locale più comodo |
| Events watcher | Verifica visiva dell’emissione di eventi/listener |
| Jobs + sync | Debug dei processi asincroni eseguendoli in sincrono |
| Client HTTP | Registro e verifica delle comunicazioni con API esterne |
Guida a Laravel Telescope
Per i dettagli di installazione e configurazione dei watcher fai riferimento alla pagina della guida.
Laravel Nightwatch
Per il monitoraggio in produzione usa Nightwatch.