Wie teuer sind JS Funktionsaufrufe (im Vergleich zur Zuteilung Speicher für eine Variable)?

StackOverflow https://stackoverflow.com/questions/114872

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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top