Foros del Web » Programando para Internet » Javascript »

Intervalos de tiempo

Estas en el tema de Intervalos de tiempo en el foro de Javascript en Foros del Web. Buen día, Siempre he tenido la duda del por qúe los navegadores interpretan diferente la velocidad sobre los intervalos de tiempo, es decir, setInterval y ...
  #1 (permalink)  
Antiguo 04/07/2011, 16:18
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 9 meses
Puntos: 32
Intervalos de tiempo

Buen día,

Siempre he tenido la duda del por qúe los navegadores interpretan diferente la velocidad sobre los intervalos de tiempo, es decir, setInterval y setTimeout. Pués por ejemplo, si creo un div y asigno un intervalo por milisegundo el cuál ira aumentando de pixel en pixel en el eje x del div, no es la mísma velocidad en todos los navegadores, por ejemplo, en firefox es lento (incluso llega a "laggearse"), en ie es rápido y en opera es muy rápido (probado en versiones modernas).

También si por ejemplo, un intervalo por milisegundo imprime un número incrementable de 1 en 1, en firefox imprime 100 por segundo, en opera alrededor de 40 y en ie como 200.

Por último, ¿Por qué los navegadores soportan tan pocas instrucciones en un intervalo?, por ejemplo si una función de 20 líneas se ejecuta cada milisegundo, no lo hace en UN milisengundo y suele "laggearse", también he probado dividir el código en varios intervalos, pero sale más lento.

Espero y alguien pueda explicarme acerca de ésto con claridad, saludos y gracias.
  #2 (permalink)  
Antiguo 04/07/2011, 17:07
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 12 años, 11 meses
Puntos: 343
Respuesta: Intervalos de tiempo

En los browsers el interprete JS comparte el thread de ejecución* con el motor gráfico, lo cual decanta en que se hace una cosa u otra.
Si vos estás interpretando o ejecutando código JS no vas a renderizar/repaintear nada en la UI y viceversa.

*Puede no cumplirse necesariamente en todos los niveles de ejecución.

Luego tenés las diferentes implementaciones de los browsers tanto del interprete como del motor grafico, de las cuales algunas son más rapidas que otras, con lo cual es lógico que no tengan el mismo rendimiento

Con respecto al setTimeout, si vos estás ejecutando una tarea al momento de ejecutar el contenido del setTimeout inevitablemente se te retrasa (recordemos que no podes ejecutar más de una tarea a la vez). Y a esto sumale que el setTimeout recién se ejecuta cuando el interprete esta libre (es decir, termino las tareas inmediatas).

El siguiente código sirve para entender esto ultimo:

Código Javascript:
Ver original
  1. // Diferimos la ejecucion en 0ms
  2. setTimeout(function() {
  3.     console.log('DELAYED!');
  4. }, 0);
  5.  
  6. var d = +new Date;
  7.  
  8. // Ocupamos el interprete por medio segundo
  9. while(+new Date - d < 500);
  10.  
  11. // Y luego con un retraso mayor a 500 ms
  12. // "DELAYED!"

EDIT:

Te recomiendo leer este articulo, que aclara las cosas un poco mejor que este post.
__________________
blog | @aijoona
  #3 (permalink)  
Antiguo 04/07/2011, 19:37
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 9 meses
Puntos: 32
Respuesta: Intervalos de tiempo

Aijoona gracias, estuvo muy bien entendido tu post, y también la publicación que mencionaste que leyéra.
Con razón es más lento usar JavaScript para realizar animaciones que en un lenguaje como C++, C#, Java, etc., además usa un sólo hilo del procesador, básicamente eso hace la gran lentitud al haber muchas ejecuciones.
Saludos!

Etiquetas: interval, intervalos, setimeout, 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 21:01.