A browser stopwatch needs to do two things well: stay accurate while the tab is in the background, and not lose your laps when you accidentally hit reset. This one tracks elapsed time using performance.now() with the start timestamp held in memory, so the displayed value is always the truth — even if the browser throttles the render loop while the tab is hidden.
Lap recording captures both the split (time from the previous lap) and the cumulative split (time from the start), which is the format used by athletic timing systems and what coaches actually want to see. Reset requires confirmation when laps exist, so a stray click can't wipe a session.
It uses performance.now(), which provides sub-millisecond resolution capped to 1ms in most browsers for security reasons. Real-world accuracy is bounded by browser scheduling and your own reaction time — typically ±50ms for human-triggered start/stop.
Yes. Time is tracked by recording the start timestamp and computing now − start on every render. The display update is throttled when the tab is in the background (browsers do this for power), but the underlying count is always correct.
Yes — the lap list can be copied to the clipboard. Each lap shows both its split time (lap duration) and its cumulative time from the start, so the data is meaningful in either form.
Slightly — most browsers reduce performance.now() resolution to 1ms (down from microseconds) to prevent timing-based side-channel attacks. For a stopwatch this is plenty; for benchmarking sub-millisecond code, use the High-Resolution Time Level 3 API in a secure context.
Explore the full suite of Time tools and 290+ other free utilities at Chunky Munster.