Foros del Web » Programando para Internet » Javascript »

setInterval() no respeta los milisegundos

Estas en el tema de setInterval() no respeta los milisegundos en el foro de Javascript en Foros del Web. Hola que tal!, Entiendo que si pones mucho que hacer dentro de un intervalo de 1ms, tarda más de lo normal, pues los recursos de ...
  #1 (permalink)  
Antiguo 01/06/2012, 13:57
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 9 meses
Puntos: 32
setInterval() no respeta los milisegundos

Hola que tal!,

Entiendo que si pones mucho que hacer dentro de un intervalo de 1ms, tarda más de lo normal, pues los recursos de la PC no logran procesarlo tan rápido ya que Javascript solo trabaja sobre un hilo de procesamiento.

Pero no entiendo por qué si no estoy poniendo prácticamente nada, se demora bastante. En el siguiente ejemplo defino un intervalo de 1ms que al llegar a 1000ms, se detenga mostrando un mensaje. Pero no tarda 1 segundo ni 2, tarda más de 4 segundos! incluso en la otra PC que tengo más lenta, tarda 10 segundos!.

Pruebenlo y me comentan, gracias!

Código Javascript:
Ver original
  1. // Intervalo de 1ms, que al llegar a los 1000ms se detiene,
  2. // pero el tiempo real pasa de los 4000ms y no hay nada pesado que procesar, ¿Qué sucéde?
  3.         var elapsedTime = 0;
  4.         var startedTime = new Date;
  5.         var timeout     = 1000;
  6.  
  7.         var t = setInterval(function(){
  8.             if ( ++elapsedTime == timeout ) {
  9.                 var finishedTime    = new Date;
  10.                 var realElapsedTime = finishedTime-startedTime;
  11.                 alert('Tiempo esperado = '+elapsedTime+'ms, Tiempo real transcurrido = '+realElapsedTime+'ms');
  12.                 clearInterval(t);
  13.             }
  14.         }, 1);

Saludos!
  #2 (permalink)  
Antiguo 01/06/2012, 14:15
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Respuesta: setInterval() no respeta los milisegundos

Te sugiero que leas este artículo para que veas cómo funciona la ejecución de procesos en el navegador y puedas analizar el problema con más herramientas: http://ejohn.org/blog/how-javascript-timers-work/
  #3 (permalink)  
Antiguo 09/06/2012, 22:14
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 9 meses
Puntos: 32
Respuesta: setInterval() no respeta los milisegundos

Ok, ya comprendía eso pero de todas formas se me hace mucho el tiempo que tarda en responder ;)
  #4 (permalink)  
Antiguo 10/06/2012, 05:55
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: setInterval() no respeta los milisegundos

Lo que pasa es que estás agontando la pila de llamadas del Interval. Utiliza intervalos de tiempo mucho más grandes. Como mínimo, 20. Y si lo que quieres es precisión, es decir, que pase exactamente 1 segundo, pues usa in setInterval de 1000.

En resumen, cuanto más grande sea el valor más preciso es el Interval.
La explicación la tienes en ese link que te han puesto. Como dices que ya lo comprendes, pues no merece la pena que lo escriba aquí otra vez.

Etiquetas: milisegundos, setinterval
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:08.