This page documents what the two browser tools record, how their summaries are calculated, and where the measurements have limits. It describes the current code—not a laboratory protocol.
Reaction test
Five valid rounds, measured separately
The test waits for a randomly delayed visual change. When the target becomes red, the page records a start timestamp with performance.now(). A valid click or keyboard activation records a second timestamp. The displayed round time is the rounded difference between them.
A click before red is a false start. It increases the false-start count but does not consume one of the five valid rounds. This keeps an early click from being misreported as an extremely fast reaction.
One roundreaction time = response timestamp − red timestamp
Reaction report
Why the median is the headline result
After five valid rounds, FPSReaction sorts the five values and uses the middle value as the median. One unusually slow or fast round can move the arithmetic mean more strongly; the median gives the central completed round without discarding any result from the report.
Arithmetic meansum of five round times ÷ 5
The best round is the smallest recorded value. Consistency is based on population standard deviation: the code measures how far all five values spread around their arithmetic mean. A smaller standard deviation means the rounds were closer together; it does not prove that the measurement was externally accurate.
Reference labels
Ratings describe this browser test
The current scoring code labels a result under 200 ms Excellent, 200–300 ms Good, 301–400 ms Average, and over 400 ms Slow. These are FPSReaction browser-test reference bands. They are not population percentiles, medical thresholds, or clinical norms.
Aim trainer
A 60-second run with three targets
Starting the trainer begins a 3-second countdown, followed by a full 60-second active target window. Exactly three targets are active. Each target keeps its own spawn timestamp; hitting one records that target's elapsed acquisition time and replaces only that target.
A primary-button press on a target counts as a hit. A primary-button press elsewhere in the arena counts as a miss, resets the streak, and moves no target. Inputs at or after the run end do not count.
Aim metrics
Report and ranking calculations
Accuracyhits ÷ (hits + misses) × 100
The report also shows average and median target time, fastest hit, best streak, difficulty, run mode, and validity. Standard Mode personal bests compare hits first, then accuracy, then lower median target time. Hell Mode adds higher Ultra-Precision Rate before the median-time tiebreaker.
Ultra-Precision Rate uses valid hits as its denominator: Ultra-Precision Hits divided by all hits. Misses already affect ordinary accuracy and are not counted again in that center-zone rate.
Validity
Competitive and Practice Mode
A Competitive run requires a primary pointer reported as a mouse, a viewport of at least 1100 by 700 CSS pixels, and an arena rendered at least 960 by 540 CSS pixels. Other environments remain playable in Practice Mode, whose results do not replace a competitive personal best.
A countdown or active run becomes invalid if the page is hidden, the window loses focus, the arena changes size by more than two CSS pixels, or a run started in fullscreen exits fullscreen. These controls improve repeatability; they are not anti-cheat protection.
Storage and privacy
Results stay in this browser
Current personal bests, language, and sound preferences use localStorage. There is no FPSReaction account, backend database, upload endpoint, or public leaderboard. Clearing browser storage can remove locally saved values.
Limitations
What the numbers cannot establish
FPSReaction is not a laboratory measurement. Display refresh and scan-out, input-device reporting, the operating system, browser event scheduling, system load, attention, and fatigue can all contribute to a recorded time. The tools are most useful for repeated comparisons on the same setup under similar conditions.