This is the working stack for teams past the "run Lighthouse and hope" stage: continuous measurement in CI, real-user data from production, and bundle analysis that tells you what to delete. Every tool named here is free or has a usable free tier.
Lighthouse as a score in a browser tab is decorative. Lighthouse CI with a lighthouserc.json that asserts specific budgets is a guardrail: set maximum numeric values for largest-contentful-paint, total-byte-weight and unused-javascript, run it against a preview deploy on every pull request, and the conversation about a regression happens before the merge instead of a month later.
npx unlighthouse --site https://example.com crawls the site, runs Lighthouse against every page it finds, and gives you a sortable dashboard. Single-page auditing finds the problem on the page you thought to check; this finds the template dragging down two hundred URLs.
The web-vitals library reports LCP, INP and CLS from real visits, and its attribution build tells you why: the LCP element's selector, the CLS-causing element, and for INP the interaction target and the long animation frame responsible. Send it to whatever you already have — an analytics endpoint, a logging pipeline, a table in your own database. Lab tools rank causes; field data ranks impact.
The Chrome UX Report API gives you the same field data Google uses, aggregated over a 28-day rolling window, for your origin and for any public competitor. Two things it is good for: sanity-checking your own RUM pipeline against an independent source, and settling an internal argument about whether your site is slow relative to the sites your users compare it to.
source-map-explorer dist/*.js attributes every byte of a production bundle back to a source file via the source map, which makes it honest about what actually shipped. rollup-plugin-visualizer does the same inside a Vite or Rollup build. Pair either with the Coverage panel in DevTools, which shows how much of the shipped code executed on a real page load — the intersection of "large" and "never executed" is your deletion list.
Real devices, real networks, real locations, with a filmstrip and a connection view. Reach for it when the question is "why is this slow on a mid-range Android in another continent", which no simulated throttle answers convincingly.
Lighthouse CI blocking pull requests on budgets. Unlighthouse on a weekly schedule so new pages get caught. web-vitals streaming from production continuously. Bundle analysis run manually whenever a budget assertion starts failing. That is four tools, no licences, and it covers regression prevention, discovery, real impact and root cause without anyone needing to remember to check a dashboard.