Heim  >  Artikel  >  Web-Frontend  >  Vergleich verschiedener Verwendungen von for-Schleifen in Javascript und wie man die Leistung verbessern kann

Vergleich verschiedener Verwendungen von for-Schleifen in Javascript und wie man die Leistung verbessern kann

伊谢尔伦
伊谢尔伦Original
2018-05-18 15:45:023597Durchsuche

Die for-Schleife ist nützlich, wenn wir Objekte oder Arrays in js durchlaufen. Schauen wir uns einige Anwendungsbeispiele der for-Schleife an. Die spezifischen Operationsdetails werden unten vorgestellt.

wird im Allgemeinen wie folgt geschrieben:

for(var i = 0;i< arr.length;i++) {
 var a = arr[i];
 //...
 }

Dies ist eine übliche, positive Sequenz für eine Schleife. Jeder kennt die Nachteile dieser Schreibweise: Die Länge von arr zu nehmen und sie jedes Mal mit i zu vergleichen, ist eine Leistungsverschwendung (und wenn sich die Länge von arr dynamisch ändert, entsteht eine Endlosschleife). Die Möglichkeit, diese Schleife zu verbessern, besteht darin, Variablen zum Speichern zu verwenden: arr.length

for(var i = 0, al = arr.length;i< al;i++) {
 var a = arr[i];
 //...
 }
Dies kann die Leistung im Vergleich zur ersten Methode leicht verbessern.

Dieses Schreiben fügt jedoch eine zusätzliche Variable al hinzu, und diese Variable ist nur nützlich, wenn sie mit i verglichen wird, was etwas nutzlos erscheint.

Wenn Ihnen die Schleifenreihenfolge nicht wichtig ist, können Sie versuchen, die Schleife in umgekehrter Reihenfolge durchzuführen:

for(var i = arr.length-1;i > -1;i--) {
 var a = arr[i];
 //...
 }
Auf diese Weise gibt es weniger Variablen und die Arr-Länge wird zwischengespeichert. Die Leistung ist ebenfalls gut. Aber der Code hier ist etwas schlecht geschrieben (ich habe es absichtlich gemacht), erstens

(er will tatsächlich -1, verdammt) und dann die Bedingung i > -1, damit die Schleife weiter ausgeführt wird, was unerträglich ist für Menschen mit Mysophobie. i = arr.length-1

Das Folgende ist meine häufig verwendete umgekehrte Reihenfolge für die Methode zum Schreiben von Schleifen:

for(var i = arr.length;i--;) {
 var a = arr[i];
 //...
 }
Dies ist bereits sehr rationalisiert. Das Prinzip muss verstanden werden: Die Bedingung für die weitere Ausführung der for-Schleife ist, dass sich die Beurteilung zwischen; immer noch 1, aber nach dem Eintritt in den Schleifenkörper ist er 0, sodass die letzte Schleife normal ausgeführt werden kann. Wenn i = 0 ist, ist i– immer noch 0 und 0 ist nicht mehr wahr, sodass die Schleife nicht weiter ausgeführt wird .

i=arr.lengthJedem ist aufgefallen, dass es im for-Schleifenkörper aller oben genannten Codes ein

gibt, das zum Herausnehmen des Array-Elements verwendet wird, zu dem gerade geloopt wird. Das ist eigentlich eine Verschwendung, und jsLint und andere werden Ihnen sagen: Deklarieren Sie keine Variablen in einer Schleife. . .

var a = arr[i]

Die umgekehrte Reihenfolge kann wie folgt vereinfacht werden, aber ich möchte nur die Vorwärtsreihenfolge, und sie muss effizient sein und weniger Variablen enthalten. Was soll ich tun?

lautet wie folgt:

Der Vorteil dieser Schreibweise besteht darin, dass es fast unvermeidlich ist, dass
for(var i = 0, a;a = arr[i++];) {
 //...
 }
verschwindet, und der oben erwähnte Satz über das Herausnehmen des Das Array-Element, zu dem derzeit eine Schleife ausgeführt wird, fehlt ebenfalls.

arr.length

Prinzip:

wird als Bedingung für die Ausführung der Schleife verwendet, es ist also keins Urteilssatz, sondern eine Zuweisungsanweisung. Weisen Sie einfach

a zu und bestimmen Sie dann, ob a ein wahrer Wert ist. Ich werde nicht auf die Haupttypen von i++ und i– eingehen. Ich sage nur, dass die Schleife anhalten muss, wenn i++ die Länge des Arrays überschreitet, und sie stoppt hier wirklich. Denn a = arr[i++] : Wenn Sie ein Element erhalten, das die Länge des Arrays selbst überschreitet, erhalten Sie nur einen undefinierten Wert, und undefiniert ist ein falscher Wert, und die Schleifenbedingung schlägt fehl. arr[i++]a=arr[i++]

Natürlich liegen auch die Mängel dieser Schreibweise auf der Hand:


1. Wenn sich die Länge von arr dynamisch ändert, entsteht immer noch eine Endlosschleife ———— Weil wir arr.length nie zwischengespeichert haben.


2. Wenn die Schleife ein Zahlenarray ist und das herausgenommene Element (d. h. der Wert von a) 0 ist, wird die Schleife beendet (da 0 ein falscher Wert ist). .


3. Wenn ein Element im Array ein falscher Wert ist (einschließlich leerer Zeichenfolge, 0, null, undefiniert), wird die Schleife ebenfalls beendet

, sodass jeder diese Methode verwendet Es ist am besten, die oben genannte Situation auszuschließen, bevor Sie sie verwenden.

Dieses Prinzip kann auch in umgekehrten Schleifen verwendet werden.

Abschließende Ratschläge:

    Vereinfachter Code bedeutet nicht hohe Effizienz
  1. Don 't Um den Code bewusst zu vereinfachen und an Leistung zu verlieren
Übrigens gibt es hier ein paar Punkte, um die Leistung der for-Schleife zu verbessern:

1. Pause zum richtigen Zeitpunkt! Kein Durchqueren erforderlich. Alle müssen Fluchtbedingungen hinzufügen!


2. Deklarieren Sie keine Variablen im for-Schleifenkörper (es wird empfohlen, var einmal und mehrfach zuzuweisen)


2. Speichern Sie die Array-Länge im Cache und verwenden Sie sie als möglichst wenige Variablen

Das obige ist der detaillierte Inhalt vonVergleich verschiedener Verwendungen von for-Schleifen in Javascript und wie man die Leistung verbessern kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn