Cronómetro online
Cronómetro online gratuito con precisión de milisegundos y cronometraje por vueltas
¿Qué es un Cronómetro Online?
Un cronómetro online es una herramienta de cronometraje de precisión que mide el tiempo transcurrido desde cero hacia arriba, normalmente con resolución de milisegundos. A diferencia de un temporizador de cuenta regresiva, un cronómetro responde a "¿cuánto tardó eso?", lo que lo hace ideal para entrenamiento deportivo, experimentos de laboratorio, presentaciones, cocina, sprints de programación y cualquier actividad donde necesites medir la duración en lugar de forzar un punto final fijo. Esta herramienta se ejecuta completamente en tu navegador usando requestAnimationFrame para actualizaciones suaves de pantalla y performance.now() para medición de tiempo monótona, por lo que se mantiene preciso incluso cuando se ajusta el reloj del sistema. El registro de vueltas permite capturar tiempos parciales con resaltado de mejor/peor vuelta, y todos los datos permanecen locales — nada se sube.
Cómo usar
Inicio rápido
- Haz clic en 'Iniciar' para comenzar — la pantalla muestra horas:minutos:segundos.milisegundos
- Haz clic en 'Vuelta' para registrar un tiempo parcial mientras el cronómetro sigue corriendo
- Haz clic en 'Pausar' para congelar la pantalla, luego 'Iniciar' para reanudar
- Haz clic en 'Reiniciar' para borrar el cronómetro y todos los registros de vueltas
Consejos
- El cronómetro usa requestAnimationFrame para actualizaciones de ~16ms y performance.now() para tiempo preciso.
- Mantén la pestaña visible para la visualización más fluida. Las pestañas en segundo plano pueden limitar los frames.
- Los tiempos de vuelta se codifican por color: verde para la vuelta más rápida, rojo para la más lenta.
Casos de uso
Principio técnico
El motor del cronómetro evita completamente el patrón setInterval propenso a la deriva. En su lugar, usa requestAnimationFrame (rAF) para actualizaciones de pantalla y performance.now() como fuente de tiempo de referencia. Cuando el usuario hace clic en Iniciar, el motor registra la marca de tiempo actual de performance.now() como startTime. En cada frame de animación, calcula elapsed = accumulated + (performance.now() - startTime), donde accumulated mantiene el tiempo total transcurrido antes de la pausa más reciente. Este modelo de dos variables (tiempo acumulado + delta de ejecución) maneja correctamente los ciclos de pausa/reanudación sin perder precisión sub-milisegundo. Se elige performance.now() sobre Date.now() porque es monótono — nunca salta hacia atrás debido a correcciones NTP, cambios manuales de reloj o transiciones de horario de verano. También proporciona resolución sub-milisegundo (típicamente 5 µs de granularidad en navegadores modernos), convirtiéndolo en el reloj adecuado para cronometraje de corta duración y alta precisión. La callback de rAF se limita a la tasa de refresco de la pantalla (típicamente 60 Hz = ~16.67 ms, hasta 120 Hz en pantallas de alto refresco), por lo que la actualización visual es suave pero no es la la referencia — el tiempo transcurrido real proviene del cálculo de performance.now(), que es continuamente correcto. El registro de vueltas captura el elapsedMs actual en el momento en que se hace clic en el botón de Vuelta, calculando la diferencia parcial contra el total de la vuelta anterior. Las vueltas más rápidas y más lentas se determinan comparando todas las diferencias de vuelta con Math.min/Math.max, y la pantalla las resalta con estilos verde y rojo respectivamente. Todo el estado vive en hooks useState de React dentro del componente cliente, y ningún dato se persiste o transmite — el cronómetro es efímero por diseño, reiniciándose completamente cuando se cierra la página o se presiona el botón Reiniciar.
- performance.now() proporciona marcas de tiempo monótonas y sub-milisegundo — inmune a cambios del reloj del sistema.
- requestAnimationFrame impulsa actualizaciones de pantalla a la tasa de refresco (60–120 Hz) para renderizado suave.
- El modelo de tiempo acumulado + delta de ejecución maneja pausa/reanudación sin pérdida de precisión.
- Las diferencias de vuelta se calculan como currentTotal - previousTotal para cronometraje parcial preciso.
- Todo el cálculo se ejecuta localmente en el navegador; sin viajes de ida y vuelta al servidor ni subidas de datos.
Ejemplos
Pista de atletismo — vueltas de 400m
Vuelta 1 -> 01:12.450 (+01:12.450)
Vuelta 2 -> 02:26.180 (+01:13.730)
Vuelta 3 -> 03:38.910 (+01:12.730)
Vuelta 4 -> 04:50.320 (+01:11.410 más rápida)Ensayo de presentación — cronometraje por diapositiva
Intro -> 00:45.200 (+00:45.200)
Problema -> 02:10.850 (+01:25.650)
Solución -> 04:35.120 (+02:24.270)
Demo -> 07:10.430 (+02:35.310)
Conclusión -> 08:25.610 (+01:15.180)
Total: 8 min 25 seg — por debajo del objetivo de 10 minEntrenamiento HIIT — seguimiento de intervalos
Ronda 1 -> 00:30.150 (+00:30.150)
Descanso 1 -> 00:45.320 (+00:15.170)
Ronda 2 -> 01:15.480 (+00:30.160)
Descanso 2 -> 01:30.510 (+00:15.030)
Ronda 3 -> 02:00.670 (+00:30.160 más lenta)
Ronda 4 -> 02:30.520 (+00:29.850 más rápida)Preguntas frecuentes
¿Qué tan preciso es el cronómetro?
El cronómetro usa performance.now() que proporciona precisión sub-milisegundo (típicamente 5 microsegundos de granularidad). La pantalla se actualiza aproximadamente a 60 fotogramas por segundo mediante requestAnimationFrame, por lo que la actualización visual está dentro de 16ms del valor real. Para la mayoría de los propósitos prácticos — deportes, cocina, presentaciones — esto es más que suficiente.
¿El cronómetro sigue corriendo si cambio de pestaña?
Sí. El tiempo transcurrido se calcula a partir de la marca de tiempo absoluta de performance.now(), no de ticks acumulativos. Cuando vuelvas a la pestaña, la pantalla muestra inmediatamente el tiempo transcurrido correcto. Sin embargo, requestAnimationFrame se limita en pestañas de fondo, por lo que la actualización visual puede pausarse hasta que regreses.
¿Qué pasa si mi computadora entra en suspensión?
performance.now() es monótono pero no avanza mientras el sistema está suspendido. Cuando la computadora despierta, la pantalla del cronómetro mostrará el tiempo transcurrido como si el sistema nunca hubiera estado dormido — NO incluirá la duración de la suspensión. Este es el comportamiento correcto para la mayoría de los casos de uso de cronometraje.
¿Puedo exportar o guardar mis tiempos de vuelta?
El cronómetro actualmente no guarda ni exporta datos de vueltas. Todos los registros de vueltas se mantienen en memoria y se borran al reiniciar el temporizador o cerrar la página. Para registro persistente, considera copiar manualmente los tiempos mostrados o usar un rastreador de fitness dedicado.
¿Por qué usar performance.now() en lugar de Date.now()?
performance.now() es monótono — nunca retrocede. Date.now() puede saltar segundos o minutos cuando se ajusta el reloj del sistema (sincronización NTP, cambio manual, horario de verano). Para cronometraje de corta duración, performance.now() es la elección correcta. También ofrece resolución sub-milisegundo, a diferencia de la resolución de milisegundos de Date.now().
¿Se sube algún dato al servidor?
No. El cronómetro se ejecuta completamente en tu navegador. No se envían datos de cronometraje, registros de vueltas ni información de uso a ningún servidor. La página funciona sin conexión una vez cargada.
¿Cuál es la diferencia entre un cronómetro y un temporizador de cuenta regresiva?
Un cronómetro mide el tiempo transcurrido hacia arriba desde cero — responde '¿cuánto tardó?'. Un temporizador de cuenta regresiva comienza desde una duración establecida y cuenta hacia abajo hasta cero — responde '¿cuánto tiempo queda?'. Esta herramienta es un cronómetro; para funcionalidad de cuenta regresiva, usa la herramienta de Temporizador de Cuenta Regresiva.