2010-04-27 7 views
5

Basta chiedersi se valga la pena di creare una funzione di loop monolitico o semplicemente aggiungere loop erano necessari.Che cosa è più veloce in Javascript un po 'di piccoli cicli di setInterval o uno grande?

L'opzione del ciclo grande sarebbe solo un ciclo di callback aggiunti in modo dinamico con una funzione di aggiunta.

l'aggiunta di una funzione sarebbe simile a questa

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

setLoop aggiungerebbe la funzione per il ciclo monolitica.

quindi vale la pena qualcosa in prestazioni o dovrei limitarmi a molti piccoli loop utilizzando setInterval?

heres il gioco

http://thinktankdesign.ca/metropolis/

e tutte le relative librerie

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

se mi attengo ai singoli loop ci saranno migliaia di loro a causa del numero di cicli di animazione.

Il gioco è un costruttore di torri e cose complicate come ascensori e auto/pedane. Per non parlare di loop per gli automi, controllando eventi come VIP, incendi e così via. Quando funzionale (un anno o due) sarà molto simile a Sim Tower ma iso-metric invece di uno scroller laterale.

risposta

3

Avere programmato tutti separatamente significa che le cose possono accadere (come l'elaborazione degli eventi di interazione dell'utente, eccetera) tra alcune delle sotto-attività che si verificano e altre. Con un unico loop monolitico, ogni ciclo del ciclo eseguirà su tutto il ciclo prima di restituire il controllo all'input dell'utente. Quindi, se stai davvero facendo un sacco di cose, è probabilmente meglio programmarli in modo indipendente per consentire al browser di essere più "intelligente" su cosa fare quando.

L'eccezione sarebbe se si intende realmente/richiedere che tutte le cose che accadono nello stesso "ciclo" avvengano senza compensazione l'una rispetto all'altra, nel qual caso l'approccio "big loop" sarebbe necessario per garantire che tutti si attivino allo stesso tempo (o almeno, il più vicino possibile quanto il tempo di esecuzione lo consente).

+0

Vedo ok, allora me ne andrò da solo. –

2

Immagino che tu possa semplicemente usare setInterval, mantenere i singoli anelli con il controllo su ognuno di essi ti darà una maggiore flessibilità, a meno che OGNI singolo oggetto debba essere accodato, ma anche a quel punto non vedo dove otterresti un miglioramento delle prestazioni da ciò che sarebbe importante.

0

La tua domanda è impossibile rispondere correttamente senza sufficienti dettagli:

  • Quanto è grande il ciclo monolitica?
  • Quanti loop piccoli vuoi aggiungere?
  • Quanto sono piccoli questi piccoli anelli?
  • Cosa stai tentando di realizzare con i tuoi loop?
  • I piccoli anelli interagiscono, come alterare la relazione delle variabili o il valore delle chiusure?
  • Ci sarebbe qualche aspettativa per la ridondanza del loop da catturare mancante altrimenti sfuggita dalla considerazione logica?

Senza dettagli sufficienti ogni risposta è corretta, rendendo così la tua domanda inutile.

+0

buon punto, controlla sopra, ho aggiornato la domanda. –

Problemi correlati