2010-04-27 16 views
5

Solo me preguntaba si vale la pena hacer una función de bucle monolítico o simplemente agregar bucles si fueran necesarios.¿Qué es más rápido en Javascript un montón de pequeños lazos setInterval, o uno grande?

La opción de bucle grande sería simplemente un bucle de devoluciones de llamadas que se agregan dinámicamente con una función de agregar.

adición de una función se vería así

setLoop(function(){ 
    alert('hahaha! I\'m a really annoying loop that bugs you every tenth of a second'); 
}); 

setLoop añadiría la función al bucle monolítica.

¿vale la pena todo en rendimiento o debería limitarme a muchos bucles usando setInterval?

aquí está el juego

http://thinktankdesign.ca/metropolis/

y todas sus bibliotecas

http://thinktankdesign.ca/metropolis/scripts/base.js

http://thinktankdesign.ca/metropolis/scripts/menu.js

http://thinktankdesign.ca/metropolis/scripts/grid.js

http://thinktankdesign.ca/metropolis/scripts/cursor.js

http://thinktankdesign.ca/metropolis/scripts/game_logic/controls.js

http://thinktankdesign.ca/metropolis/scripts/game_logic/automata.js

si me quedo con bucles individuales que habrá miles de ellos debido a que el número de bucles de animación.

El juego es un generador de torres y cosas complicadas como ascensores y autos/peds. Sin mencionar los bucles para los autómatas, controlando eventos como VIPs y incendios, etc. Cuando sea funcional (un año o dos) se parecerá mucho a Sim Tower, pero iso-métrico en lugar de un desplazamiento lateral.

Respuesta

3

Tenerlos todos programados por separado significa que pueden suceder cosas (como el procesamiento de eventos de interacción del usuario, etc.) entre algunas de las subtareas que se producen y otras. Con un bucle monolítico grande, cada ciclo del bucle ejecutará todo en ese ciclo antes de devolver el control a la entrada del usuario. Por lo tanto, si realmente está haciendo muchas cosas, probablemente sea mejor programarlas de forma independiente para permitir que el navegador sea "más inteligente" sobre qué hacer cuando.

La excepción sería si realmente pretende/requiere que todas las cosas que suceden en el mismo "ciclo" ocurran sin compensación una de la otra, en cuyo caso se requeriría el enfoque de "gran bucle" para garantizar que todas al mismo tiempo (o al menos, tan cerca como el tiempo de ejecución lo permita).

+0

Veo que lo voy a dejar bien entonces. –

2

Me imagino que puede usar setInterval, mantener los bucles individuales con control sobre cada uno le dará una mejor flexibilidad, a menos que CADA elemento deba ser puesto en cola, pero incluso en ese punto no veo donde obtendrías una mejora en el rendimiento de esto que importaría.

0

Su pregunta es imposible de contestar correctamente sin suficientes detalles:

  • ¿Qué tan grande es su bucle monolítica?
  • ¿Cuántos pequeños loops desea agregar?
  • ¿Qué tan pequeños son esos pequeños bucles?
  • ¿Qué estás intentando lograr con tus bucles?
  • ¿Interactuarán los pequeños bucles, como la alteración de la relación de variables o el valor de los cierres?
  • ¿Habría alguna expectativa de que la redundancia de bucle detectara la pérdida que de otro modo escaparía de la consideración lógica?

Sin suficientes detalles, cada respuesta es correcta, lo que hace que su pregunta no tenga sentido.

+0

buen punto, verifique arriba, actualicé la pregunta. –

Cuestiones relacionadas