2011-08-04 24 views
6

Hola, estoy programando una utilidad de cronómetro en javascript y tengo una pregunta sobre la eficiencia y la sobrecarga. Hay dos maneras en que he considerado hacer el cronómetro:Cronómetro eficiente

1.Almacene una Fecha de inicio y mida constantemente la cantidad de milisegundos que ha estado desde esa fecha.

2. Cree un número entero e incremente su valor en un intervalo establecido.

Quiero saber cuál es el más eficiente. Además, no estoy seguro si la opción n. ° 2 sería muy precisa, si alguien tiene alguna información al respecto también sería increíble.

+1

# 1 es más eficiente Y # 2 no funcionará, porque no puede garantizar el tiempo entre 'ticks'. – OverZealous

+0

'performance.now()' está disponible en los navegadores modernos https://developer.mozilla.org/en-US/docs/Web/API/Performance/now –

Respuesta

3

Como han dicho otros, ve con # 1. Si desea un reloj que marque cada segundo (o minuto o lo que sea), debe estimar el tiempo para el siguiente "tic" para que setTimeout se llame unos pocos ms después del momento adecuado, p. para funcionar justo después de la siguiente, toda la segunda:

var d = new Date(); 
var interval = 1020 - d.getMilliseconds(); 
setTimeout(fn, interval); 

De esta forma si la ejecución de una llamada se retrasa por el sistema está ocupado, el siguiente debe ser llamado todavía alrededor de 20 ms después del siguiente segundo entero.

+1

Esto todavía puede perder tiempos de espera (por ejemplo, la computadora se queda dormida); aún se requiere un delta dentro del tiempo de espera, dependiendo de lo que se requiera. –

+0

Por supuesto, cualquier cosa en un navegador depende del navegador que ejecuta el script. ¿Qué quieres decir con un "delta dentro del tiempo de espera"? – RobG

+0

Lo interesante de asegurarse de que el reloj esté actualizado en el momento correcto es interesante. Sin embargo, sin esto, el reloj aún mostrará el tiempo correcto, incluso si está detrás en la pantalla, ¿no? –

3

La opción 2 no será precisa, especialmente si tiene una página con javascript adicional para otros fines. Ve con el primer acercamiento.

+0

Sin embargo, con la opción # 1 un * cambio de reloj * debe ser representaron. Es decir, el cambio esperado y el cambio real deben compararse (con un margen de error apropiado) y corregirse si es necesario. De acuerdo, es un caso extremo. –