Wie teuer sind JS Funktionsaufrufe (im Vergleich zur Zuteilung Speicher für eine Variable)?
-
02-07-2019 - |
Frage
einig JS-Code wie, dass man hier gegeben:
for (var i = 0; i < document.getElementsByName('scale_select').length; i++) {
document.getElementsByName('scale_select')[i].onclick = vSetScale;
}
Möchten Sie den Code schneller, wenn wir das Ergebnis getElementsByName in eine Variable vor der Schleife setzen und verwenden dann die Variable danach?
Ich bin nicht sicher, wie groß die Wirkung im wirklichen Leben ist, mit dem Ergebnis aus getElementsByName
typischerweise <10 Artikeln. Ich möchte auf jeden Fall die zugrundeliegende Mechanik verstehen.
Auch wenn es noch etwas bemerkenswert, über die beiden Optionen ist, bitte sagen Sie mir.
Lösung
Auf jeden Fall. Der Speicherbedarf zu speichern, dass nur ein Zeiger auf ein DOM-Objekt sein würde, und das ist deutlich weniger schmerzhaft als eine DOM jedes Mal, wenn Sie etwas verwenden müssen, suchen zu tun!
Idealish Code:
var scale_select = document.getElementsByName('scale_select');
for (var i = 0; i < scale_select.length; i++)
scale_select[i].onclick = vSetScale;
Andere Tipps
Caching Eigentum Lookup einige helfen könnte, aber c schmerzen die Länge des Arrays, bevor die Schleife bewiesen, schneller zu sein hat zu starten.
So eine Variable in der Schleife deklariert, die den Wert des scale_select.length halten würde einige die gesamte Schleife beschleunigen.
var scale_select = document.getElementsByName('scale_select');
for (var i = 0, al=scale_select.length; i < al; i++)
scale_select[i].onclick = vSetScale;
Eine intelligente Implementierung von DOM würde seine eigene Caching tun, um den Cache ungültig zu machen, wenn sich etwas ändert. Aber nicht alle DOMs heute auf gezählt werden kann diese intelligent sein ( Husten IE Husten ), so ist es am besten, wenn Sie dies selbst tun.
Im Prinzip wäre der Code schneller sein, wenn wir das Ergebnis getElementsByName in eine Variable vor der Schleife setzen und verwenden Sie dann die Variable danach?
Ja.
Verwenden Sie Variablen. Sie sind nicht sehr teuer in JavaScript und Funktionsaufrufe sind auf jeden Fall langsamer. Wenn Sie Schleife mindestens 5-mal über document.getElementById () verwenden, um eine Variable. Die Idee hier ist nicht nur der Funktionsaufruf ist langsam, aber diese spezifische Funktion ist sehr langsam, da sie das Element mit der angegebenen ID im DOM zu finden versucht.
@ Oli
Caching die Länge Eigenschaft der Elemente in einer Variablen geholt wird auch eine gute Idee:
var scaleSelect = document.getElementsByName('scale_select');
var scaleSelectLength = scaleSelect.length;
for (var i = 0; i < scaleSelectLength; i += 1)
{
// scaleSelect[i]
}
Es gibt keinen Grund, die scaleSelect.length in einer separaten Variable zu speichern; es ist eigentlich schon in einem -. scaleSelect.length nur ein Attribut des scale Array ist, und als solches ist es so schnell wie jede andere statische Variable zugreifen
Ich glaube schon. Jedesmal, es Schleifen, muss der Motor die document.getElementsByName Anweisung neu zu bewerten.
Auf der anderen Seite, wenn der Wert in einer Variablen gespeichert wird, als es hat allready den Wert.