A lab tool measures one load on one connection, and the metric that counts is the 75th percentile of real visitors over 28 days.
import { getLCP, getFID, getCLS } from 'web-vitals'
const send = ({ name, value, id }) => {
navigator.sendBeacon('/vitals', JSON.stringify({ name, value, id }))
}
getLCP(send)
getFID(send) // needs a real interaction. no lab tool has one.
getCLS(send)
First Input Delay cannot be measured in a lab at all, because it requires somebody to interact — a lab tool reports it as zero or omits it. sendBeacon is what makes collection reliable, since it survives the page being closed where a fetch does not. Collecting your own field data rather than relying on an aggregated public dataset is what gives per-template numbers, which is where the actionable information is.