Diagnosing a Slow Page — Cheat Sheet

FE Lead prep · ref 04

The loop (measure, don't guess)

RUM → reproduce in lab → localize to a metric/phase → fix root cause → verify in field
RUM / fieldLab / synthetic
jobfind & prioritizeexplain & reproduce
answerswhether / for whom (metric, page, segment)why (flame chart, waterfall)
toolCrUX / RUM vendor / PerformanceObserverLighthouse + DevTools Perf panel
Rule: RUM hands the lab a target. Optimizing a lab number no real user hits = wasted sprint.

Reading the flame chart

Slow LCP → 4 sub-parts

Sub-partFix if it dominates
TTFBCDN / edge / backend
Load delaypreload + fetchpriority=high
Load timecompress, AVIF, srcset
Render delayinline critical CSS, defer JS

Poor INP → 3 phases

PhaseLook / fix
Input delaylong task before handler → break up
Processingheavy handler → make cheap, defer
Presentationbig re-render → virtualize

Other tools to name

RUM vendors to name

Lead one-liners (memorize)

The loop  “RUM to find it, lab to explain it. Field says which metric & which users; the flame chart says why. Fix the root cause, verify in the field.”
Systemic  “Fix the class of issue, not the page — then a CI budget so it can't recur. Guessing from my laptop is how teams waste a sprint.”
web-vitals  “I ship Google's web-vitals, not a hand-rolled observer — so my field numbers match the CrUX numbers I'm graded on, and attribution names the slow element.”

Sources: Chrome — Performance panel · web.dev — Optimize LCP · MDN — RUM vs synthetic · GoogleChrome/web-vitals

Don't fail the interview

1. RUM first, always. Never start optimizing from your fast laptop.
2. Throttle the lab (CPU 4×, slow 4G) to mimic the slow segment — else lab lies.
3. Read the LCP sub-part — load delay ≠ load time ≠ TTFB ≠ render delay; each has a different fix.
4. Fix the class, not the instance + add a CI guardrail. "Systemic, not a quick fix."
5. Don't hand-roll RUM. CLS = largest session window, not the sum; INP spans the whole visit — ship web-vitals so your field numbers match CrUX.
6. CrUX ≠ session RUM. It's aggregated/28-day — for debugging one slow session you need a vendor or your own web-vitals→beacon pipeline.