Methodology

How we measure

Every decision here is one that changes the number on your screen. They are written down so you can check them, and so you know why our numbers differ from other sites.

The clock

All timing uses performance.now(), a monotonic clock with sub-millisecond resolution that cannot jump when the system clock changes. We never use Date.now(), which is wall-clock time and is not suitable for measuring intervals.

When the timer starts

This is the difference that matters most. When a script changes an element’s colour, the change is not visible until the browser paints the next frame — one to two frames later, which is 8 to 33 milliseconds depending on your refresh rate. Most reaction tests start their clock at the moment the script runs, so they charge you nothing for that delay and report a faster number than really happened.

We schedule the change inside an animation frame callback and take the timestamp of the following frame, which is the browser’s own estimate of when that frame was presented. That is why scores here typically read 8 to 30 milliseconds slower than sites that do not do this. Ours is the honest one.

When the press is recorded

We listen for pointerdown and keydown, not click. A click event only fires when the button is released, which adds however long you held it. The clock is read on the very first line of the handler, before any state is touched.

Key repeat is ignored everywhere. Holding the space bar down counts as one press, not sixty per second.

Scoring

Reaction time is scored on the median of five rounds. A mean would let one distracted round move your published number by tens of milliseconds; the median is the score you would repeat if you sat down and did it again, which is what a benchmark should report. Your mean and your best round are both shown alongside it.

A false start voids the round and you repeat it. We do not score it as a very slow round, because that would poison both your median and the shared distribution.

Click tests start their timer on your first click rather than on a separate start button, so no part of your reaction to the button is charged against your clicking speed.

Typing reports net words per minute — correct characters divided by five, per minute — with raw WPM, accuracy and consistency shown next to it. A word is five characters, the standard used in typing research since the 1920s.

Percentiles

Every percentile is calculated against people using the same kind of input as you. Touch, mouse and keyboard are genuinely different measurements: a touchscreen samples on its own schedule and your finger travels further, so a phone score is not a slower mouse score, it is a different thing.

Some sites add a flat penalty to touch scores and call the result normalised. That invents a number nobody measured. We keep the distributions apart instead.

Until we hold enough of our own samples, the bands under each test come from published datasets, and each one names its source directly beneath the table. Once a test has more than a thousand clean samples of its own, the percentile switches to our data and shows the sample size.

Your hardware

We measure your display’s refresh rate by timing forty animation frames and taking the median interval, then report half a frame as the uncertainty your screen adds. On a 60 Hz panel that is 8.3 milliseconds; at 144 Hz it is 3.5.

That is a floor, not a total. Display processing adds more — some televisions add over 100 milliseconds in their default picture mode — and wireless peripherals add a few milliseconds of their own. If you want your fastest honest number, use a wired mouse on a monitor in game mode.

Detecting automation

A run is excluded from the shared statistics if the browser reports the events as synthetic, if the tab lost focus mid-test, if a score is physically implausible, or if the gaps between clicks are too regular to be a hand. Human clicking varies by fifteen percent or more even at speed; a script varies by well under two.

An excluded run still shows you your score. We are not in the business of telling someone their own result is a lie — only of keeping the public distribution clean.

Your data

Results are stored in your browser’s local storage. There is no account and no server-side record tied to you. When a result contributes to the shared statistics, what is sent is the test, the variant, the device type and the score — nothing that identifies you. You can export or delete everything from your results page.