I'm collecting data using the Navigation Timing API.
Specifically, these four metrics:
// Time spent during redirection
var redirectTime = performance.timing.redirectEnd - performance.timing.redirectStart;
// DNS query time
var lookupDomainTime = performance.timing.domainLookupEnd - performance.timing.domainLookupStart;
// TCP connection time
var connectTime = performance.timing.connectEnd - performance.timing.connectStart;
// Time to first paint, in milliseconds.
var firstPaintTime = window.chrome.loadTimes().firstPaintTime * 1000 - performance.timing.navigationStart;
I'm finding that on a regular basis redirectTime + lookupDomainTime + connectTime > firstPaintTime
. If Chrome's first paint metric is calculated from navigationStart, then this means the first paint happens before any HTML has been downloaded. That seems impossible.
If firstPaintTime isn't calculated from window.performance.timing.navigationStart
, from what point is it calculated?