N+1-problemen systematisch opsporen
We lopen de praktische flow van N+1-debugging met Telescope door. Je merkt niet alleen op dat “dezelfde SELECT wordt herhaald”, maar voert de hele workflow uit, inclusief de controle na de fix.1
Vind trage requests via Requests
Open
/telescope en identificeer op het tabblad Requests de requests met een lange uitvoeringstijd.2
Controleer de uitgevoerde SQL via Queries
Open je de details van een request, dan zie je alle SQL-queries die tijdens die request zijn uitgevoerd. Wordt eenzelfde soort SELECT herhaald, dan heb je een N+1.
3
Los het op met eager loading
Voeg
with() toe aan je code en controleer de queries opnieuw. Is het aantal queries flink gedaald, dan is de fix geslaagd.dd() of logregels aan je code toe te voegen.
Specifieke requests volgen met tags
Telescope heeft een tags-functie. Geef je metTelescope::tag() een willekeurige tag aan entries, dan kun je in het dashboardfilter snel alleen de entries met die tag tonen.
Dit is bijzonder handig wanneer je alleen de verwerking rond een specifieke gebruikers-ID of order-ID wilt volgen.
/telescope/requests simpelweg user:42 en je ziet alleen de requests van gebruiker met ID 42.
Tags automatisch toekennen aan modellen
Via detags-methode van de TelescopeServiceProvider kun je een specifieke model-ID aan alle entries toevoegen.
HasTags op een model, dan wordt de tag automatisch toegevoegd wanneer dat model wordt vastgelegd.
De Dump-watcher benutten
Gebruik jedump(), dan komt de output in de HTML-response terecht en wordt het debuggen van API’s lastig. Met de Dump-watcher van Telescope kun je de output van dump() loskoppelen van de browserresponse en vastleggen in het dashboard.
Het gebruik is eenvoudig: roep dump() aan terwijl het tabblad “Dump” van /telescope openstaat.
dd() stopt het de uitvoering van je app niet, wat handig is bij het debuggen terwijl je een reeks requests afvuurt.
Comfortabel e-mails debuggen met Mailpit
Door de Mail-watcher te combineren met de lokale SMTP-server Mailpit verbetert de flow van e-mailontwikkeling aanzienlijk.Events en listeners debuggen
Het debuggen van een event-driven implementatie is vaak lastig. “Wordt het event wel afgevuurd?” en “Welke listener wordt aangeroepen?” via logs uitzoeken is omslachtig. Met de Events-watcher van Telescope zie je in één overzicht welke events zijn afgevuurd en welke listeners daarbij horen. Wordt een listener niet aangeroepen, controleer dan de entry van het event op het tabblad Events.- Het event wordt afgevuurd maar er verschijnt geen listener → de listener is niet geregistreerd (controleer de
EventServiceProvider) - Het event zelf wordt niet afgevuurd → controleer de plek waar
event()wordt aangeroepen
Queue-jobs debuggen
Bij het debuggen van asynchrone verwerking is de oorzaak lastig te achterhalen door alleen naar logs te kijken. De Jobs-watcher van Telescope legt alles vast, van het dispatchen van de job tot het uitvoeringsresultaat. Klik je op de entry van een mislukte job, dan zie je de stacktrace en de exceptiemelding. Naast dequeue:failed-tabel kun je het ook in Telescope bekijken, waardoor het onderzoeken van de faaloorzaak snel gaat.
De HTTP-client debuggen
Bij het debuggen van communicatie met externe API’s helpt de HTTP Client Watcher. Requests via deHttp::-facade en de bijbehorende responses worden vastgelegd.
dd($response->json()) te schrijven: alles staat in het dashboard.
Samenvatting
Laravel Telescope-gids
Raadpleeg de gidspagina voor details over installatie en watcher-configuratie.
Laravel Nightwatch
Monitoring in productie doe je met Nightwatch.