v133 · performance
RUM Migration Guide
Chrome 133 reverts responseStart to its pre-Early-Hints meaning and adds finalResponseHeadersStart. This guide shows the exact code change needed in a Real User Monitoring library, with a live PerformanceObserver reading your browser's actual values.
checking finalResponseHeadersStart…
checking Resource Timing…
What changed in Chrome 133:
responseStart reverted to return the first response (103 Early Hints included). New field finalResponseHeadersStart gives the 2xx/4xx/5xx response time. RUM libraries that were using responseStart for TTFB should now use finalResponseHeadersStart ?? responseStart.
Code diff — RUM TTFB calculation
Before pre-133 / other browsers
function getTTFB(entry) { // responseStart = first non-103 response - return entry.responseStart - - entry.requestStart; } function getServerTime(entry) { - return entry.responseStart - - entry.requestStart; }
After Chrome 133+
function getTTFB(entry) { // Use finalResponseHeadersStart when // available (Chrome 133+) for true 2xx + const start = entry.finalResponseHeadersStart + ?? entry.responseStart; + return start - entry.requestStart; } function getServerTime(entry) { + const start = entry.finalResponseHeadersStart + ?? entry.responseStart; + return start - entry.requestStart; }
Field semantics across eras
| Field | Pre-Chrome 130 intent | Chrome 130-132 (reverted) | Chrome 133+ |
|---|---|---|---|
responseStart |
First byte of final (non-103) response | Changed to first byte incl. 103 — broke RUM | Reverted: first response (103 or final) |
finalResponseHeadersStart |
Did not exist | Did not exist | New: first byte of 2xx/4xx/5xx response headers |
| TTFB (no Early Hints) | responseStart − requestStart |
Same (no change when no 103) | finalResponseHeadersStart ?? responseStart |
| TTFB (with Early Hints) | Only final 200 measured | 103 timestamp — too early | finalResponseHeadersStart − requestStart |
Live PerformanceObserver — your browser's values