Web vitals¶
The client uses PerformanceObserver when the browser has it and silently
reports zero when an entry type is unsupported. Nothing here blocks the page.
| value | unit | source |
|---|---|---|
lcp |
ms | the last largest-contentful-paint entry |
cls |
score | the sum of layout-shift entries without recent input |
inp |
ms | the slowest event entry with an interaction id (durationThreshold 40 ms) |
fid |
ms | the first first-input entry, as an INP fallback |
ttfb |
ms | responseStart from the navigation timing entry |
dcl |
ms | domContentLoadedEventEnd from the same entry |
ld |
ms | loadEventEnd, or the entry's duration if load has not fired |
All values are rounded to whole milliseconds except cls, which keeps three
decimals (for example 0.05).
Where they go¶
They are part of the session payload inside ext1; see
Events and payload. A page view carries the
values known at the moment it is sent, so early views have zeros and the final
summary on pagehide has the full set.
Caveats¶
lcpis the last candidate observed. A late candidate updates the next beacon, not one already sent.clsexcludes shifts within 500 ms of user input, which is the usual definition. The client does not keep the shift sources.inpis only reported by browsers that implement event timing; older browsers fall back tofid, which is reported separately.- When Navigation Timing level 2 is unavailable, the client falls back to
performance.timing; if neither exists the three navigation values stay zero. - These are single-session numbers. Aggregation (P75, per-route, per-release) happens on the receiving side, not in the browser.