← Back to Research Nav

SpeedTest

Download · Upload · Ping · Jitter · measured locally

English 简体 繁體

Click to start the speed test

Throughput samples

1 Ping
2 Download
3 Upload

Operators quote Mbps (megabits per second); 1 MB/s = 8 Mbps.

Download

—Mbps

Upload

—Mbps

Ping

—ms

Jitter

—ms

Last 5 runs

No runs yet. Press GO above to start the first one.

What is this

SpeedTest measures the throughput of your own connection. One click on the big GO button and the browser does three things in order: it sends ten empty requests to the test endpoint to get round-trip latency (ping and jitter), it pulls several parallel download streams with progressively larger payloads to get download throughput, and it keeps posting locally generated random payloads to get upload throughput. The gauge shows the live rate, the curve under it plots every sample over time, and four result cards summarise download / upload / ping / jitter at the end.

The endpoints used are Cloudflare's public speed-test API, so the test traffic goes straight to a Cloudflare edge and never through this site: we ship a static page with no backend and no logs. Rates are computed by your own browser from wall-clock timings and known byte counts, so nothing depends on cross-origin response headers. Results are kept only in your browser's localStorage (the last 5 runs, clearable at any time).

Features

How to use

  1. Press the big GO button; the three phases light up in order, and Stop cancels the run at any time.
  2. Read the four result cards. Prefer the number your download manager shows? Switch to MB/s in the top right - note that operators quote Mbps.
  3. Press Copy result to take a one-line summary (download / upload / ping / jitter / unit) to support staff or into your log.
  4. Run it again at another time of day - the last five runs are kept at the bottom, and Clear history removes them.

Data source and method

Downloads use speed.cloudflare.com's __down?bytes=N endpoint (a GET that returns exactly N bytes), uploads use __up on the same host (a POST of a locally generated random payload), and latency is the round-trip time of __down?bytes=0. Throughput is bytes multiplied by 8, divided by the elapsed wall clock from performance.now(), divided by 1e6 (Mbps). Ping is the minimum and average over repeated round trips; jitter is the mean absolute deviation between consecutive round trips. Warm-up samples (the first 1 MB probes and the TCP slow-start ramp) are excluded from the final numbers.

Treat the result as a feel reference, not a billing audit. A browser only sees bytes delivered at the HTTP layer and times them with the wall clock, so TLS handshakes, TCP slow start and congestion windows, proxies and caches, NIC buffers and OS scheduling all add error; the window is only a few seconds, so a short stall (a phone hopping Wi-Fi bands, say) moves the number visibly. To verify a contracted line, use your operator's or vendor's own tool several times.

FAQ

Why is it lower than the bandwidth I pay for?
More things sit between you and that number than raw bandwidth: Wi-Fi signal and band (2.4 GHz often delivers a few tens of Mbps), other devices on the same network and their background updates, the NAT performance of your router or ONT, how far the Cloudflare edge you landed on is, and the interconnect and congestion between that edge and your ISP. To approach the quoted figure, use an Ethernet cable straight to the modem, stop other downloads, and take the best of several runs at different hours.
Is this an exact measurement?
No, it is an approximation. A browser cannot read the NIC counters; it counts bytes at the HTTP layer and times them with the wall clock over a window of only a few seconds, so TCP slow start, proxy caches, OS scheduling and momentary congestion all show up in the result - two runs on the same machine can differ by 20-30%. What it is good for is comparison: same hour, same network, different device or different access method.
Does my traffic go through your server? Are the results uploaded?
Neither. All download and upload data comes from and goes to Cloudflare's public speed-test endpoint, speed.cloudflare.com, requested directly by your browser - this site is not on that path. We serve a static page with no backend, no API and no logs, and nothing is sent anywhere on your behalf. Rates and latency are computed in your browser's memory, and the history lives only in your own device's localStorage, invisible to others and removable with Clear history.
Why is upload so much lower than download?
Most access technologies are asymmetric by design: cable (DOCSIS), fibre-to-the-building and 4G/5G all give the upstream a narrower channel than the downstream, and home plans are often quoted as something like 100 Mbps down / 30 Mbps up. On top of that, a browser can open several parallel download streams to fill the pipe, while uploads are bounded by HTTP request-body and TLS record chunking, so a slightly lower measured upstream than the theoretical figure is normal.
What do ping and jitter mean - which one matters for VoIP?
Ping here is the minimum round-trip time between your device and the Cloudflare edge, in ms, mostly set by distance and access technology. Jitter is the mean absolute deviation between consecutive round trips and tells you how steady the path is. Voice calls and online games suffer from jitter and packet loss far more than from absolute latency: 60 ms with 2 ms of jitter usually feels fine, while 30 ms with 40 ms of jitter stutters.

More tools on this site

Pure front end · zero dependencies · free · EN / 简体 / 繁體