Ver Mensaje Individual
  #5 (permalink)  
Antiguo 18/10/2012, 19:04
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: SetTimeout me pierde presicion?

El setTimeout o el SetInterval no son exactos. Depende del tiempo de procesador que les de el navegador, mejoran o empeoran. Si minimizas el navegador, o cambias de pestaña, se ralentizan mucho. No te puedes fiar de ellos para hacer un cronómetro exacto.

Para aproximarse a la exactitud, puedes hacer lo siguiente:

var tiempo=(new Date()).getTime();

Eso te da el numero de milisegundos transcurridos desde el 1 de enero de 1970.
Luego, en cada llamada del timeout a tu funcion, en la primera linea haz:

http://jsfiddle.net/marlanga/Uq4YN/

Así, en el peor de los casos, el cronómetro se ha retrasado 500 milisegundos (es decir, el tiempo que le pongamos al timeout). Si quieres mas precision, ponle menos tiempo. Sin embargo, consumirá mas CPU (y en un teléfono móvil eso supone consumir antes la batería).