Mouse reaction time test
The box below waits a random amount of time, then lights up as a whole. The moment it lights up, press the left button straight away — 5 trials to a round, and you get the median.
Let us be clear up front: the millisecond figure you read carries the latency of the screen refresh, the panel response and the mouse polling, so what it measures is this whole set-up, not your nerves. That number is always larger than your real reaction time, and by how much cannot be measured. It is only good for comparing one machine against itself — change the computer, or even just the monitor, and the figure shifts bodily by ten-odd to twenty-odd milliseconds. The full breakdown is below.
Changing the colour changes the measurement condition — numbers from different colours cannot be compared directly.
Only the result number and confidence level are uploaded; raw samples stay in your browser.
Trial log
Each row is one attempt in this round. When there is no median, the raw readings in this table are the only thing worth looking at — they are also the evidence that the median really was worked out from them.
What is inside the number
Four stretches of delay sit between the colour appearing on screen and your press being recorded. They are all added on top of the result, and that stretch cannot be measured — the browser can see neither your screen nor your USB cable. So this page reports the raw reading only and does not take off an estimated correction for you: that would only produce a fake number that looks precise.
| Refresh rate | One frame | Total (incl. scan-out, panel response, mouse sampling) |
|---|---|---|
| 60Hz | 16.7ms | about 25 – 35ms |
| 120Hz | 8.3ms | about 15 – 25ms |
| 144Hz | 6.9ms | about 12 – 18ms |
| 240Hz | 4.2ms | about 8 – 14ms |
The largest item is not mysticism, it is unavoidable by construction: the colour is painted inside some frame, and that frame only actually appears at the next screen refresh. So this one item alone adds a fixed whole frame — 16.7 milliseconds at 60Hz, while a 1000Hz mouse polling rate accounts for just 1 millisecond. The screen matters far more than the mouse.
This is also why this page ignores timing precision. The polling-rate page needs cross-origin isolation because it measures the difference between two adjacent events, which at 8000Hz is only 125 microseconds, while an un-isolated timestamp is quantised to 100 microseconds — an 80% error. Here there is only one event, on a scale of hundreds of thousands of microseconds, so 100 microseconds is a few parts in ten thousand, and the mouse’s USB sampling is 10 – 80 times larger than that. Isolating once would not take any of that error away, yet it would make every visitor sit through a page reload — so this page does not isolate.
What makes this number incomparable
- Changing the monitor or the refresh rate. The one-frame item moves with it outright — take the same computer from 60Hz to 144Hz and that item alone drops by 8 milliseconds.
- Changing the mouse or its polling rate. The button state is sent along with the polling, so 125Hz samples it only once every 8 milliseconds while 1000Hz samples it every millisecond — this item can differ by several milliseconds.
- The page being switched away from or covered by another window. A background tab does not paint, so the colour never appears at all. When this page notices it has been switched away from, it voids the round outright and records that fact, rather than recording a fake reading hundreds of milliseconds long.
- Using a trackpad or a touchscreen. That is not “pressing the left button”, and the sampling chain is entirely different. This page says so when it detects an imprecise pointer.
Common questions
Because what this number holds is not just your reaction. Four stretches of delay sit between the screen showing the colour and your press being recorded: the screen has to wait for its next refresh before the picture is presented at all, the panel itself takes a few milliseconds to change colour, the mouse’s button state is only sampled at the next poll, and the system and browser still have to deliver it. These stretches are all added on top of the result, and together they usually come to more than your neural reaction time. So what this page measures is how fast this computer is, not how fast you are. To find out whether you have got faster, you can only compare the same machine before and after.
Because that device delay is a fixed value that travels with the machine. On a 60Hz screen the “wait out a whole frame” item alone is about 8 milliseconds more than at 144Hz, and adding the panel response and the mouse’s polling rate, a difference of ten-odd to twenty-odd milliseconds between two machines is entirely normal — a gap bigger than most people gain from a year of practice. So comparing your score with someone else’s, or with the “the average human reaction is 250ms” figure online, is really comparing displays. The same person on the same machine scores very consistently — which is exactly why this page dares to use the median.
Because the average cannot take one lapse of attention. A single 600-millisecond daydream inside a round pushes the average up by tens of milliseconds, while the median barely moves — it only cares what “the one in the middle” was. So read three numbers together: Median reaction is the verdict, Valid trials says whether the round was enough, and Fastest is the smallest value observed — not your limit; a few more rounds will very likely go lower.
You pressed before the colour appeared — that is not a reaction time, so the trial does not count: it is counted on its own and you start again. The wait is re-randomised every round (1.5 – 4 seconds), so counting seconds and watching for the rhythm is no use. This is not a punishment, it is necessary: without a false-start rule, a hand held down in advance would land just after the colour and be recorded as a fast and fake value.
The press came less than 100 milliseconds after the colour appeared. The physiological floor for a simple visual reaction is around 120 – 150 milliseconds, and a “reaction” faster than that cannot have been a response to seeing it — it was prepared in advance and happened to land just after the colour. It is kept out of the median but still counted on its own, not quietly thrown away.
The left button needs one press, no more. The judgement looks at the instant of the press, and if you hold the button down across the colour change the browser will not send another press event at all (a press event fires only at the moment it goes from not-pressed to pressed), so with no timeout the round would hang there forever. Not having received a press within 1500 milliseconds counts as a timeout and the trial is void. The right and middle buttons do not count, and while the test is running the right-click menu and middle-button autoscroll are blocked too, so neither will interrupt you.
A single measurement on its own says nothing — your state and whether you were distracted can swing one result by tens of milliseconds. So a round runs 5 trials and takes the median. With fewer than 5 valid trials (if two were voided, say), the median gives no number and shows a dash — the “median” of two is really just the average, which is worse than giving nothing.
