Por qué 1ms no siempre significa 1ms
· 6 min
Un milisegundo parece una unidad precisa e inequívoca, pero la precisión real de un timestamp leído en código depende de la fuente de reloj detrás de él, que varía más de lo que la mayoría asume.

Resolución no es lo mismo que precisión
Un reloj puede reportar valores formateados en milisegundos (como `Date.now()`) mientras el temporizador del sistema operativo detrás solo se actualiza cada pocos milisegundos de hecho, varias lecturas consecutivas pueden devolver el mismo valor aunque pase tiempo real entre ellas, escondiendo diferencias menores a ese intervalo de actualización.
Los contadores monotónicos existen por un motivo específico
El reloj de pared puede retroceder en el tiempo, sincronización NTP, segundos bisiestos, ajuste manual, así que medir duración con timestamps de reloj de pared puede generar duraciones negativas o completamente erróneas. Los relojes monotónicos (`performance.now()`, `System.nanoTime()`, `CLOCK_MONOTONIC`) existen específicamente para nunca retroceder, por eso son la herramienta correcta para medir duración, nunca para registrar cuándo pasó algo.
Jitter: por qué dos mediciones del mismo código dan números distintos
El escalado de frecuencia de la CPU, otros procesos disputando el mismo núcleo, efectos de caché, pausas del recolector de basura en runtimes gestionados, todo eso introduce ruido en la medición. Una única medición de una operación rápida casi no tiene sentido aislada; lo que importa es la distribución a lo largo de muchas ejecuciones.
La consecuencia práctica
Cuando la duración medida se acerca a la resolución real del reloj, una query de ~1ms en un reloj que se actualiza cada ~15ms, por ejemplo, no vale la pena confiar en el número aislado. El camino correcto es medir muchas iteraciones y mirar la distribución, o cambiar a una fuente monotónica de alta resolución, hecha justamente para ese tipo de medición.