Skip to content
ReactionTestTime

Methodology

How we measure reaction time

Our tests are built to be precise, fair and transparent. Here's exactly how a reaction is measured, what can affect it, and how individual results become statistics.

The testing process

Every test follows the same four steps.

  1. 1

    Random delay

    After you start, the signal is scheduled after a random delay (1.5 to 5 s in the classic test) so it can't be predicted.

  2. 2

    Visual or audio signal

    The screen changes, a target appears, or a sound plays. The signal time is recorded at that moment.

  3. 3

    Your response

    You click, tap or press a key. We use the event's own high-resolution timestamp.

  4. 4

    Result calculation

    Response time minus signal time, in milliseconds, calculated locally in your browser.

Technical details

let signalAt;

function showSignal() {
  showGreen();                        // change the screen
  requestAnimationFrame(() => {
    signalAt = performance.now();     // frame that paints green
  });
}

function onPointerDown(event) {
  const reactionMs = event.timeStamp - signalAt;
  if (reactionMs < 100) return falseStart(); // anticipation
  record(Math.round(reactionMs));
}

Simplified for illustration.

  • performance.now() is a monotonic, high-resolution clock. Unlike Date.now() it isn't affected by system clock changes. Browsers deliberately coarsen its resolution slightly for security, but it remains well below 1 ms in practice.
  • Visual signal timing is taken in the animation frame that paints the change, rather than when the timer fires.
  • Audio signal timing starts when a pre-generated beep is triggered via the Web Audio API.
  • Responses use pointerdown and keydown (the moment you press, not when you release), with held-key repeats ignored.
  • Network independence: results are calculated and shown before anything is sent. Saving to our database happens afterwards, asynchronously.
  • If you switch tabs during an attempt it's discarded, because hidden tabs delay timers and frames.

False starts

An attempt is a false start, and isn't counted, if you:

  • respond before the signal appears, or
  • respond less than 100 ms after it.

Responses under 100 ms are treated as anticipation rather than reaction, following common practice in reaction time research such as the Psychomotor Vigilance Test. Responses slower than 10 seconds are discarded as lapses.

Example timeline

Illustrative numbers.

  1. 0 msYou start the attempt.
  2. 2,314 msThe frame that turns the screen green is painted. Timing starts.
  3. 2,587 msYou press the mouse button. Timing stops.

Reaction time = 2,587 − 2,314 = 273 ms

Accuracy & limitations

What we do

  • High-resolution browser timing
  • Randomised, unpredictable delays
  • False-start and anticipation rejection
  • Frame-aligned signal timestamps
  • Server-side validation of results

What can affect results

  • Monitor refresh rate & processing
  • Mouse, keyboard & touch latency
  • Audio output latency (e.g. Bluetooth)
  • Browser load & background apps
  • Fatigue, attention, age and practice

Device latency: a 60 Hz display refreshes every ~16.7 ms, so a signal can appear up to one frame after it's scheduled; higher refresh rates reduce this. Mice and keyboards are polled at fixed rates, wireless links and key debouncing add delay, and touchscreens scan the panel at intervals. Together, device latency commonly adds tens of milliseconds. This is included in every browser-based result.

Device & browser compatibility

  • Desktop

    Windows, macOS, Linux

  • Laptop

    Trackpad or mouse

  • Mobile

    iOS and Android

  • Tablet

    Touch input

For the most comparable results, use an up-to-date browser, close heavy background tabs, and compare results taken on the same device.

How we calculate statistics

  1. Collection: each completed session is submitted anonymously with its individual attempts.
  2. Validation: the server recomputes every summary from the raw attempts and rejects impossible values (under 100 ms or over 10 s), so submitted summaries can't be faked.
  3. Inclusion: sessions need at least 3 valid attempts to count toward statistics.
  4. Aggregation: we compute the mean, median and 1st to 99th percentiles of session averages, grouped by test type and, where enough data exists, by device type or self-reported age range.
  5. Thresholds: nothing is published until at least 100 sessions exist, and each subgroup needs its own minimum sample.
  6. Freshness: statistics are cached and refreshed every 15 minutes.

Privacy

  • Test results are anonymous: no account, name or email.
  • A random identifier stored in your browser helps prevent duplicate and abusive submissions.
  • We store a country code derived by our host at request time; IP addresses aren't stored with results.
  • Device type, input type and browser family are coarse categories, not fingerprints.
  • We never infer age, gender or any sensitive attribute.
Read our privacy policy

Not a medical-grade measurement

Browser-based reaction testing is not medical-grade measurement. ReactionTestTime is for information, education and entertainment. It cannot diagnose any medical, neurological or psychological condition. If you're concerned about changes in your reaction time, coordination or alertness, please talk to a qualified healthcare professional.

References

  1. Basner M, Dinges DF. Maximizing sensitivity of the psychomotor vigilance test (PVT) to sleep loss. Sleep. 2011;34(5):581–591.
  2. Woods DL, Wyma JM, Yund EW, Herron TJ, Reed B. Factors influencing the latency of simple reaction time. Front Hum Neurosci. 2015;9:131.
  3. Hick WE. On the rate of gain of information. Q J Exp Psychol. 1952;4(1):11–26.

Put our methodology to the test

Five attempts, about a minute. See your average, median and consistency instantly.

Take the test now