Ermitteln Sie die Länge des Arrays, bevor Sie es in der for-Funktion verwenden, damit die Länge des Arrays nicht bei jeder Iteration gezählt werden muss (vorausgesetzt, die Länge ändert sich während der Schleife nicht).
var arLen=myArray.length;
for ( var i=0, len=arLen; i<len; i++ ){
// do something with myArray[i]
}
Während Sie Recht haben, dass es die Geschwindigkeit erhöht, liegt das nicht daran, dass die Alternative jedes Mal die Länge zählen muss. Bei einer Sprache wie Java, bei der die length/size/count-Methode des Array-Objekts tatsächlich eine Methode ist (die vermutlich eine Berechnung durchführt, um die Größe zu ermitteln), ist es besser, die Größe so zwischenzuspeichern, wie Sie es beschrieben haben.
Der Grund, warum es auf diese Weise geringfügig schneller ist, liegt darin, dass der Browser das Array-Objekt jedes Mal dereferenzieren muss, wenn er seine Länge abruft, und nicht die Länge neu berechnen.
Außerdem, wenn Sie hier noch eine sehr geringfügige Verbesserung vornehmen möchten, können Sie Folgendes tun:
for (var i = 0, len=myArray.length; i < len; ++i) {
// Schleife
}
wobei der Schlüssel hier das
++ianstelle voni++ist.Warum ist das schneller?
Der Post-Inkrement-Operator (i++) gibt zuerst den aktuellen Wert von i zurück und inkrementiert ihn dann um eins. Der Prä-Inkrement-Operator (++i) inkrementiert zuerst den Wert und gibt ihn dann zurück.
Wie Sie sehen, muss der Compiler den vorherigen Zustand von i als Rückgabewert für i++ speichern, während für ++i der inkrementierte Zustand zurückgegeben wird. Der Unterschied ist jedoch wirklich winzig, aber hey, wir haben uns einen ansonsten verschwendeten Lookup erspart. ;-)
Ein weiterer kleiner Trick, der zur Geschwindigkeitssteigerung beitragen kann, ist das Zählen bis Null, falls möglich, da ein Vergleich mit Null schneller ist als ein "Kleiner als"-Vergleich (der im Grunde eine Subtraktion gefolgt von einem Vergleich mit Null ist).
Eine weitere Sache, die ich vorschlagen möchte, ist, warum haben Sie eine weitere Variable len verwendet, um den Wert der Länge des Arrays zu speichern
len=arLenwarum nicht einfach
var arLen=myArray.length;
for ( var i=0; i<arLen; i++ ){
// etwas mit myArray[i] tun
}
Sehr interessante Punkte für eine einfache Schleifenstruktur :) Wirklich sehr konzeptionell.. Liebe die Kommentare!
Hallo, Sie haben absolut Recht. Ich möchte durch die Werte eines Arrays schleifen und CSS anwenden. Können Sie mir das bitte sagen.
Warum nicht beide Variablen weglassen und die Testbedingung noch weiter vereinfachen?
anstelle von
len=arLen
oder
var arLen=myArray.length;
wie wäre es damit
var i = myArray.length;
while (i–) {
// etwas mit myArray[i] tun
};
Dies ist ein Benchmark für dieses Thema http://jsperf.com/for-loop-research
Ich denke, wir können es weiter optimieren. Nach meinem Verständnis sollte arLen iLen sein. arLen bezieht sich so, als ob es eine Variable vom Array-Typ wäre, aber es ist eine Integer-Variable. Wir folgen immer den besten Namenskonventionen für Variablen, die sich auf die zukünftige Wartung des Codes beziehen.