Ikke gjett — mål først. Trøttheten kan komme fra klienten, nettverket, serveren eller databasen. En systematisk tilnærming finner hvor tiden går, og fikser så den største bidragsyteren i stedet for å optimalisere tilfeldig.
Ikke gjett — mål først. Trøttheten kan komme fra klienten, nettverket, serveren eller databasen. En systematisk tilnærming finner hvor tiden går, og fikser så den største bidragsyteren i stedet for å optimalisere tilfeldig.
1. MEASURE → where is the time spent? client render, network, server, DB?
2. REPRODUCE → confirm it reliably (same endpoint, payload, user)
3. TRACE → use APM/distributed traces to find the slow span
4. CHECK RECENT CHANGES → deploys, config, traffic, data growth
5. ISOLATE → layer by layer, narrow to one component
6. FIX the biggest contributor → re-measure to confirm
Bruk nettleserens Network/Performance-fane og server timing for å dele det totale. En nyttig oppdeling:
Total 1200ms =
DNS/connect 20ms
server TTFB 900ms ← the bottleneck is server-side
download 80ms
client render 200ms
Se på persentiler, ikke gjennomsnitt: p50 (typisk bruker) kontra p99 (verste tilfelle). En rask p50 med en treg p99 peker på sporadiske problemer — lock contention, kalde cacher, en treg DB-replikk, eller GC pauses — ikke et enhetlig problem.
APM-verktøy (traces) viser nøyaktig hvor tiden går innenfor en forespørsel:
GET /orders 950ms
├─ auth check 10ms
├─ SELECT orders 30ms
└─ loop: SELECT user per order 900ms ← N+1 query, the real cause
Sporet peker rett på den skyldige samtalen. Sjekk deretter nylige endringer — en utrulling, en manglende indeks, eller 10x datavekst forklarer ofte en plutselig regresjon.
Jetting sløser bort timer på å optimalisere feil lag. Måling først, sporing av det trage spennet, og å se på p50 kontra p99 forvandler en vag "det er tregt" til en spesifikk, reparerbar årsak — og ny måling beviser at reparasjonen faktisk fungerte.