Ver Mensaje Individual
  #6 (permalink)  
Antiguo 18/08/2007, 17:49
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 4 meses
Puntos: 45
Re: Ejecutar reiteradas vences una funcion con distintos delays

Hola:

Yo personalmente por tradición uso la manera que te comenta caricatos, es decir, llamar al setTimeout dentro de la función. En respuesta a tus preguntas:

Cita:
Iniciado por Calisco
(1) Gasto mucha memoria al hacer esto ?. Pensemos que yo lo quiero, por ahí, para 500 o 1000 iteraciones.
Bueno, yo de memoria poco me preocupo en los setTimeouts. No creo que haya diferencia entre llamarlos todos de golpe y llamarlos poco a poco. Supongo que el gasto de memoria es mayor (o más instantáneo) cuando se llaman a todos los setTimeout a la vez, como es tu método.

Cita:
Iniciado por Calisco
(2) Cuanto mas recurso gasta este script a diferencia al que ha implemento Caricatos (arriba ?
Yo diría, casi con total seguridad, que hacer un bucle de 1000 iteraciones estableciendo un setTimeout ralentiza mucho más que hacer una llamada, y después establecer el setTimeout, para que luego esa segunda llamada establezca otro setTimeout (con un descanso).

El método de caricatos tiene la ventaja de que se puede cancelar dentro de la función si ocurre alguna condición (por ejemplo si un contador ha llegado a un número que no deseamos), o incluso llamarlo con diferentes lapsos de tiempo dependiendo de qué condiciones.

Cita:
Iniciado por Calisco
(3) Cuan preciso es ?
También, con casi ninguna duda, es que el más preciso es el del for inicial. Teniendo en cuenta que tu funcion x() tarda en ejecutarse t milisegundos, si hacemos una llamada y seteamos primer setTimeout, se establecerá con un retardo de t milisegundos. Mientras que si los seteamos todos desde el principio, quedan establecidos ya, no hay líneas que ejecutar antes del setTimeout. Ésto no se nota si x() es rápida, pero si x() tarda en ejecutarse 5sgs con la llamada dentro de la función lo que pasaría es:
1ª llamada: Ejecución de x(): sg: 0 - 5. Establecimiento de setTimeout a 10sg.
2ª llamada: Ejecución de x(): sg: 15 - 20. Establecimiento de setTimeout a 10sg.
3ª llamada: Ejecución de x(): sg: 30 - 35. Establecimiento de setTimeout a 1sg.
...
Y con el for creación de bucles...:
Establecemos todas las llamadas en el segundo 0, 10, 20...
1ª llamada: Ejecución de x(): sg: 0 - 5.
2ª llamada: Ejecución de x(): sg: 10 - 15. Establecimiento de setTimeout a 1sg.
3ª llamada: Ejecución de x(): sg: 20 - 25. Establecimiento de setTimeout a 1sg.

Aunque todo esto es teórico, y habría que probarlo, aunque lo veo difícil. Lo que habría que saber es si el navegador cuenta los segundos mientras está ocupado ejecutando otras cosas. Yo diría que no los cuenta, en ese caso los dos scripts actuarían igual.

Cita:
Iniciado por Calisco
(4) Eventos externos tipo onMouseDown, onClick, etc; afectan al funcionamiento ?
En realidad no sé a qué te refieres, supongo que es el mismo problema de la precisión. Un ejemplo bastaría para entenderlo (y para hallar solución, supongo).

Cita:
Iniciado por Calisco
(5) Hay alguna forma de hacerlo mejor ?
A mi no se me ocurre una manera de llamar a una función de esa forma, bueno sí, con un setInterval y cortando el intervalo cuando sea necesario dentro de la función, pero no valdría si hay que modificar variables pasadas por argumento (haciendo esas variables globales sí, pero no siempre es cómodo).



Bueno, espero que aclaremos ideas.
Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.