Measure with both lab and field data — they answer different questions. Lighthouse is lab (synthetic, reproducible, for debugging); RUM is field (real users, for truth). If you only trust one, you optimize the wrong thing.
Measure with both lab and field data — they answer different questions. Lighthouse is lab (synthetic, reproducible, for debugging); RUM is field (real users, for truth). If you only trust one, you optimize the wrong thing.
| Lab (Lighthouse) | Field / RUM |
|---|
| Source | One synthetic run, fixed device/network | Real visits, all devices/networks |
| Good for | Debugging, CI regression gates, repeatable | What users actually experience |
| INP | Can't measure (no real interactions) | Measured across the whole visit |
| Weakness | Doesn't reflect your real traffic | Noisy, needs volume, harder to debug |
Lighthouse runs a single throttled load on a clean machine — great for reproducing an issue, useless for knowing your p75. INP especially can only be captured in the field, because it needs real interactions over a session.
import { onLCP, onCLS, onINP } from "web-vitals";
function send(metric) {
// Attribution build tells you WHICH element/interaction caused it
navigator.sendBeacon("/rum", JSON.stringify({
name: metric.name, value: metric.value, id: metric.id,
}));
}
onLCP(send); onCLS(send); onINP(send); // report each metric as it finalizes
This is the same methodology as Google's CrUX (Chrome User Experience Report), which powers Search ranking — CrUX is real-user p75, not lab.
Senior signal is knowing lab ≠ field, that ranking uses field p75, and that INP is only real in the field. Optimizing a Lighthouse score while real p75 stays poor is a classic trap this question is designed to expose.
A library of IT interview questions with detailed answers — from Junior to Senior.
Donate