Ich habe über einige JavaScript-Code, der in einer performance-sensitiven Umgebung ausgeführt werden soll, vor allem eine Game-Engine in mobilen Umgebungen.Hat die Verwendung lokaler Variablen (statt wiederholten Zugriffs auf Eigenschaften) jemals die Leistung beeinträchtigt?
In vielen Fällen verwendet dieser Code keine lokalen Variablen, sondern verwendet stattdessen explizite Ketten, z.
if (this.x.y[z].i) {
this.x.y[z].a += this.x.y[z].b;
}
Wo beiden this.x.y
this.x.y.z
und repräsentieren „Duplizierung“ - und, wenn keine der Zwischen Eigenschaften Getter hat, und wo q
eine lokale Variable ist nicht anderweitig verwendet - semantisch äquivalent zum folgenden behandelt werden kann.
var q = this.x.y[z]
if (q.i) {
q.a += q.b;
}
(Die Namen wurden vage besonders gehalten Vorspannung, um zu versuchen und zu mildern, diese Frage nicht über das „Muster“ zu folgen - obwohl ich das letzteres bevorzugen und die Absicht, es zu 100% zu nutzen und so fragen sind Diese Frage.)
Jetzt, bevor ich eine ganze Reihe von Kommentaren über "Code für Klarheit schreiben" und "nicht vorzeitig optimieren", lesen Sie weiter!
So angesichts der folgenden Aussagen/Axiom und stellt fest, dass diese Frage nicht darüber, wie die Leistung zu verbessern, sondern eher, wenn lokale cache/„alias“ Variablen können Abnahme Leistung auf relevanten JavaScript-Implementierungen:
- Die Einführung einer lokalen Variablen, wenn ein Mitglied mehrmals aufgerufen wird, führt zu mehr klarem Code. (Dies ist subjektiv, aber ist ein Axiom für die Frage.)
- Die Verwendung einer lokalen Variablen, wie für nicht-dynamische Eigenschaften gezeigt, wird immer die gleiche Semantik haben.
- Es gibt keine Schließungen über die lokalen Variablen erstellt werden; als solche gibt es keine Bedenken, die Objektlebensdauern zu erhöhen oder anderweitig einen größeren Ausführungskontextsumfang beizubehalten.
- Der Fokus liegt auf mobile Browser, einschließlich Nicht-/Niedrig-JIT-Sorten - z.B. JavaScriptCore und/oder was auch immer war auf Android vor V8.
- Browser sind bereits gut für diesen Fall optimiert und es wird nicht erwartet, dass die Verwendung einer lokalen Variablen zu einer spürbaren "Leistungssteigerung" führen wird - diese Frage ist das Gegenteil.
Kann/wird mit lokalen Variablen statt von [mehreren] direkten Zugriff auf Eigenschaften führen zu einer Abnahme in der Leistung? Wo eine solche Abnahme "nicht vernachlässigbar ist .."
Die Art, wie Sie eine solche Frage beantworten, ist das Testen. Im Allgemeinen wird das Speichern eines Werts in einer lokalen Variablen die Leistung nicht beeinträchtigen und wird sie wahrscheinlich verbessern. –