05:00
Una cuenta atrás que cuenta pulsos se retrasa; una que mira el reloj no
Los navegadores frenan a propósito los temporizadores de las pestañas que no estás mirando. Una cuenta atrás construida restando una cantidad fija en cada pulso pierde exactamente el tiempo que el navegador retuvo, así que termina tarde, a veces por minutos. Esta guarda el instante en que debe acabar y lo compara con el reloj del sistema en cada actualización, con lo que el frenado deja de importar.
Cómo funciona
- Convierte horas, minutos y segundos en una única duración y la descuenta.
- Registra una hora de fin objetivo al pulsar iniciar y deriva la pantalla del reloj.
- Pausa y reanuda sobre el tiempo restante, y bloquea los campos mientras corre.
duración = horas × 3.600.000 + minutos × 60.000 + segundos × 1.000 (milisegundos) vencimiento = ahora + duración restante = vencimiento − ahora, releído en cada actualización terminado cuando restante ≤ 0
Ejemplo resuelto
Un temporizador de cinco minutos, iniciado y dejado en una pestaña de fondo.
- duración = 5 × 60.000 = 300.000 ms
- el vencimiento queda fijado en el instante en que pulsas iniciar
- un temporizador que cuenta pulsos resta un paso fijo en cada actualización, así que las actualizaciones perdidas son tiempo perdido
- este recalcula vencimiento − ahora, así que las actualizaciones perdidas no cuestan nada
- cuando vuelves a la pestaña, la lectura ya es correcta
La cuenta atrás es exacta la mires o no. Cualquier temporizador que acumule sus propias restas en vez de consultar el reloj se desviará justo en las condiciones en que es más probable que lo uses.
Cómo leer el resultado
- El temporizador vive en la página. Cerrar la pestaña lo destruye y después no te llegará ninguna alarma; para lo que de verdad no puedes perderte, usa una alarma del dispositivo, que sobrevive al navegador.
- La pausa conserva el tiempo restante y no la duración original, así que reanudar continúa donde lo dejaste. Reiniciar vuelve a lo que digan los campos en ese momento, y por eso los campos se bloquean mientras corre.
- Los segundos mostrados se redondean al alza, así que un temporizador que marca 1:00 tiene por delante entre cincuenta y nueve y sesenta segundos. Descontado así, la pantalla llega a 0:00 justo cuando el tiempo se ha agotado de verdad y no un segundo antes.
- Las pestañas de fondo también pueden retrasar el momento en que se advierte el final. El tiempo restante será correcto en cuanto la página vuelva a ejecutarse, pero un navegador que haya suspendido la pestaña por completo no puede avisarte al segundo exacto.
Preguntas frecuentes
- ¿Seguirá corriendo el temporizador si cambio de pestaña?
- Sí, y seguirá siendo exacto. Como la hora de fin se fija al iniciar y la pantalla se deriva del reloj del sistema, el frenado en una pestaña de fondo cambia cada cuánto se redibuja la cifra, nunca cuál es la cifra.
- ¿Puedo cerrar la pestaña y que aun así me avise?
- No. Una cuenta atrás que corre en una página deja de existir con ella. Si perderla importaría, pon además una alarma en el teléfono o en el sistema operativo.