2014-10-03 5 views
5

Ho cercato del codice JavaScript progettato per essere eseguito in un ambiente sensibile alle prestazioni, principalmente un motore di gioco negli ambienti mobili .L'utilizzo di variabili locali (anziché accesso a proprietà ripetute) ha mai danneggiato le prestazioni?

In molti casi questo codice non utilizza variabili locali ma preferisce invece utilizzare catene esplicite, ad es.

if (this.x.y[z].i) { 
    this.x.y[z].a += this.x.y[z].b; 
} 

Dove sia this.x.y e this.x.y.z rappresentano "doppioni" - e dove nessuna delle proprietà intermedie hanno getter, e dove q è una variabile locale non utilizzato altrove - possono essere trattati semanticamente equivalente a quanto segue.

var q = this.x.y[z] 
if (q.i) { 
    q.a += q.b; 
} 

(I nomi sono stati mantenuti vaghi particolare per cercare di attenuare pregiudizi; questa domanda non è su quale "modello" da seguire - anche se io preferisco la seconda e l'intenzione di usarlo al 100% e quindi chiedo questa domanda.)

Ora, prima di avere un gran numero di commenti parlando di "codice di scrittura per chiarezza" e "non ottimizzare prematuramente", continua a leggere!

Quindi, dato il seguente asserzioni/assioma e notando che questa domanda è non su come migliorare le prestazioni, ma piuttosto se si utilizza/variabili locali cache "alias" può diminuzione prestazioni rilevanti implementazioni JavaScript:

  • L'introduzione di una variabile locale, quando si accede a un membro molte volte, porterà a un codice più chiaro. (Questo è soggettivo, ma è un assioma nell'interesse della domanda.)
  • Utilizzando una variabile locale, come mostrato, per le proprietà non dinamiche avrà sempre la stessa semantica.
  • Ci sono no chiusure create sulle variabili locali; in quanto tale, non vi è alcuna preoccupazione per l'aumento della durata degli oggetti o per il mantenimento di un ambito di contesto di esecuzione più ampio.
  • Focus è su browser browser, comprese le varietà non/JIT basso - ad es. JavaScriptCore e/o qualsiasi cosa riguardasse Android prima del V8.
  • I browser sono già ottimizzati per questo caso e non è previsto che l'utilizzo di variabili locali comporterà un notevole aumento delle "prestazioni": questa domanda è l'opposto.

può/si utilizza le variabili locali invece di [multiplo] risultato l'accesso alle proprietà diretto in un diminuzione in termini di prestazioni? Dove tale diminuzione è "non trascurabile .."

+2

Il modo in cui rispondi a una domanda del genere è il test. In generale, il caching di un valore in una variabile locale non danneggerà mai le prestazioni e probabilmente lo migliorerà. –

risposta

1

La risposta dipende probabilmente più dal browser che dal codice. Si consideri che JavaScript è stato creato per essere "interpretato", il che significa che il codice viene analizzato ed eseguito mentre viene analizzato. In questo scenario, la dichiarazione di una variabile locale viene analizzata ed eseguita ogni volta che viene chiamata la funzione, contenente la dichiarazione di variabile. Questo non può qualificarsi come "veloce".

Tuttavia, i moderni motori di elaborazione JavaScript non stanno più facendo le cose in questo modo; stanno essenzialmente compilando il codice quando viene caricata la pagina web.La dichiarazione di una variabile locale ora viene elaborata una volta sola - insieme alle dichiarazioni di tutte le altre variabili, come globals e proprietà dell'oggetto. In questo scenario è probabile che non ci sia un modo più veloce di dichiarazione delle variabili, per la persona che scrive il codice da preferire.

Problemi correlati