About this demo
What gets measured
Download
From Resource Timing. Transfers that overlap in time are merged into a burst, and the
burst's bytes are divided by the wall time it occupied. Cache hits and cross-origin
responses without Timing-Allow-Origin report zero bytes and are skipped.
Upload
From XMLHttpRequest upload progress events, which mark exactly when a
request body finished going out, and from fetch timings with one round trip
subtracted. Only body sizes are read — never body contents.
Latency and jitter
Round trip is the minimum time to first byte across recent requests, or half the shortest TCP+TLS handshake when one was measured. Jitter is the mean absolute deviation of time to first byte around its median.
Confidence
Rises with sample count, total bytes observed and agreement between samples. A page like this one moves too few bytes to say anything, so confidence stays low rather than the number being wrong.
What it cannot do
- It cannot exceed what the site itself transfers. On a 1 Gbps link, a page that only ever moves 40 KB assets will read low — the link was never asked for more.
- The first page view on a very fast link tends to read low, because new connections spend their first few round trips ramping up. It corrects for this, but only within reason.
-
Cross-origin assets are invisible unless the other origin sends
Timing-Allow-Origin. Your own CDN can; someone else's usually will not. - Upload numbers need actual uploads. A site that never sends a body will never have one.
Privacy
Everything stays in the browser. The library makes no requests of its own, sends nothing
anywhere, and keeps its state in localStorage under a single key. It reads the
sizes and timings of transfers the page already made, never their contents.