Wird die JavaScript-Str.length bei jedem Aufruf oder nur einmal berechnet?

8

Welcher Weg ist effizienter? Gibt es einen Unterschied?

Dieser:

%Vor%

Oder diese:

%Vor%     
Silver Light 24.05.2011, 14:49
quelle

4 Antworten

9

In den Browsern, wo dies wirklich wichtig ist (lese: IE), wird es jedes Mal berechnet, also ist es schneller, den Wert in einer lokalen Variablen zu speichern.

Ссылка

Es war , dass

%Vor%

war schneller als

%Vor%

Heute jedoch optimiert V8's (JS-Engine von Chrome), dass Letzteres schneller läuft als das Erste. Das ist großartig - denken Sie daran, Sie brauchen sich in Chrome keine Gedanken um die Leistung zu machen.

Wenn Sie mehr über die JavaScript-Leistung erfahren möchten, High Performance JavaScript ist ein solides Tool lesen. Nehmen Sie die Empfehlungen jedoch ein wenig, da ein Code, der Code im IE schneller macht (6, 7, 8 oder sogar 9), den Code in Chrome oder Firefox 4 möglicherweise langsamer laufen lässt.

    
Matt Ball 24.05.2011, 14:52
quelle
1

Der zweite ist bei weitem der sicherere Weg zu gehen. In der ersten gehen Sie davon aus, dass es nicht neu berechnet wird. In der zweiten wissen Sie, dass es nicht geht. Das zweite ist jedoch nicht immer der beste Weg. Es funktioniert nur, wenn Sie andere Prozesse kennen nicht die Länge des Arrays beeinflussen. Also bei globalen Variablen usw. muss man vorsichtig sein. Dies kann auch für das Ändern des Inhalts (Länge) eines Arrays innerhalb einer for-Schleife gelten, die an der oberen Grenze des Arrays endet.

    
kemiller2002 24.05.2011 14:53
quelle
1

Strings sind in JavaScript unveränderlich , so ist es unwahrscheinlich, dass selbst schlechte Implementierungen von Javascript die length -Eigenschaft der Zeichenkette bei jedem Zugriff neu berechnen würden.

Sie können dies selbst mit jsperf testen; Mit Chrome 12 scheint Ihr erstes Beispiel schneller zu sein .

    
Dexter 24.05.2011 14:55
quelle
0

In der Theorie würde ich erwarten, dass der zweite Codeblock schneller sein sollte.

Da jedoch die heutigen JS-Interpreter eigentlich hoch optimierte JIT-Compiler sind, würde ich mir vorstellen, dass sie solche Dinge erkennen und optimieren würden.

Das sollte für so ziemlich alle Browser in der aktuellen Mainstream-Anwendung gelten, mit der offensichtlichen Ausnahme von IE8 und niedriger, wo es jemand rätseln kann, wie es funktioniert, aber es wird in beiden Richtungen langsam sein.

    
Spudley 24.05.2011 14:54
quelle

Tags und Links