Heim  >  Artikel  >  Web-Frontend  >  Welchen Einfluss hat das Schreiben von For-Schleifen in JavaScript auf die Ausführungseffizienz?

Welchen Einfluss hat das Schreiben von For-Schleifen in JavaScript auf die Ausführungseffizienz?

伊谢尔伦
伊谢尔伦Original
2017-07-19 14:40:572425Durchsuche

Der Einfluss des Schreibens einer For-Schleife auf die Effizienz

Im Allgemeinen gibt es zwei Möglichkeiten, eine For-Schleife zu schreiben:

  1. Kein Schreiben von How So deklarieren Sie Variablen: for(var i = 0;i<arr.length;i++){}

  2. So deklarieren Sie Variablen: for(var i = 0,len = arr.length;i < len;i++){}

Zusätzlich zu for-Schleifen gibt es Außerdem forEach() gibt es auch Artikel, die besagen, dass forEach() am effizientesten ist, und es wird empfohlen, die forEach()-Schreibmethode zu verwenden. Welche ist also effizienter? Lass uns einen Test machen und sehen.

Testplan

Der Gesamttestplan sieht wie folgt aus:

  1. Erstellen Sie eine Testarray-Variable, die 40 Millionen enthält.

  2. Verwenden Sie zwei Schreibmethoden: for-Schleife und foreach, um diese Testvariable zu durchlaufen.

  3. Führen Sie auf derselben stabilen Maschine 10 Tests durch und ermitteln Sie schließlich den Durchschnitt.

  4. Testumgebung: CPU: Inter(R) Core i5-3210M, RAM: 12GM, System: win10 (x64)

Testprozess

Erstellen einer Testvariablen

Verwenden Sie zunächst eine While-Schleife, um eine Testvariable zu erstellen. Die Details sind wie folgt:


var testArrs = [],
 i = 0;
while(i<40000000){
 testArrs.push(i);
 i++;
}

Schreiben Sie die entsprechende Testfunktion

, um den von mir verwendeten Timecode zu messen und auszuführen > und console.time() zum Testen. console.timeEnd()

Für diese drei for-Schleifen erstellen Sie zunächst drei Funktionen, sie sind

foreach-Schleifentest:


function testForeach(testArrs){
 console.time(&#39;foreach&#39;);
 var newArrs = [];
 testArrs.forEach(function(i){
 newArrs.push(i);
 });
 console.timeEnd(&#39;foreach&#39;);
}
For-Schleife ohne Variablendeklaration:


function testNoDeclare(testArrs){
 console.time(&#39;no declare&#39;);
 var newArrs = [];
 for(var i = 0;i<testArrs.length;i++){
 newArrs.push(i);
 }
 console.timeEnd(&#39;no declare&#39;);
}
Schreiben mit Variablendeklaration


function testUseDeclare(testArrs){
 console.time(&#39;use declare&#39;);
 var newArrs = [];
 for(var i = 0,len = testArrs.length;i<len;i++){
 newArrs.push(i);
 }
 console.timeEnd(&#39;use declare&#39;);
}

Führen Sie die Testfunktion aus

Das Ausführen der Testfunktion ist sehr einfach, rufen Sie einfach die Funktion auf


testForeach(testArrs);
testNoDeclare(testArrs);
testUseDeclare(testArrs);

Testergebnisse

Nach 10 Tests wurden die folgenden Ergebnisse erhalten

foreach 不写声明 写声明
2372.891ms 672.530ms 743.974ms
2431.821ms 710.275ms 805.676ms
2422.448ms 729.287ms 741.014ms
2330.894ms 730.200ms 755.390ms
2423.186ms 703.255ms 769.674ms
2379.167ms 689.811ms 741.040ms
2372.944ms 712.103ms 710.524ms
2316.005ms 726.518ms 726.522ms
2535.289ms 733.826ms 747.427ms
2560.925ms 793.680ms 817.098ms
平均值 平均值 平均值
2414.56ms 720.15ms 755.83ms
Ich frage mich, ob die Ergebnisse Sie überrascht haben? Ich hätte nicht erwartet, dass die gebräuchlichste Schreibweise die effizienteste ist. Warum? Ich habe es noch nicht herausgefunden, also wenn jemand es weiß, sagen Sie es mir bitte, aber ich denke, die Art und Weise, wie die Aussage geschrieben ist, ist bedeutungslos. Da

dieses len = arr.length möglicherweise zwischengespeichert wurde, macht es für uns keinen Sinn, eine len-Variable zum Speichern zu deklarieren. arr.length

Besondere Schreibweise für die for-Schleife

Die grundlegende Syntax der for-Schleife lautet:


for (语句 1; 语句 2; 语句 3)
{
被执行的代码块
}
  1. Anweisung 1: Führen Sie

  2. aus, bevor die Schleife (Codeblock) beginnt. Anweisung 2: Definieren Sie die Bedingungen für die Ausführung der Schleife (Codeblock)

  3. Anweisung 3: Ausführen, nachdem die Schleife (Codeblock) ausgeführt wurde


Wenn wir eine for-Schleife verwenden, um 1 bis 10 auszugeben, können wir schreibe:


for(var i=0;i<10;i++){
console.log(i);
}
Aber! Gemäß der obigen grammatikalischen Anleitung können wir es auch so schreiben


for(var i=10;i--;){
console.log(i);
}
Als ich es zum ersten Mal las, war ich verwirrt, wie konnte man es so schreiben? Aussage 2 enthält die Schleifenbedingung und i- ist die Beurteilungsbedingung. Wenn in Anweisung 2 „true“ zurückgegeben wird, wird die Schleife tatsächlich weiter ausgeführt. Wenn in js 0,null,undefiniert,false,'','' als bedingte Beurteilung verwendet wird, ist das Ergebnis falsch, was bedeutet, dass es falsch ist, wenn i- 0 erreicht, und die Schleife endet.

Gehen Sie zurück zum Code am Anfang des Artikels


for (var i = 0, rule; rule = rules[i++];) {
 //do something
}
Diese Regel = Regeln[i++] ist die Beurteilungsbedingung undefiniert, wird die Schleife beendet. Wenn dieser Code also auf normale Weise geschrieben wäre, würde er so aussehen:


for(var i = 0;i < rules.length;i++){
 var rule = rules[i]
}
Tatsächlich fügt er lediglich Beurteilung und Zuweisung zusammen und weist Werte zu beim Schleifen. Ist es nicht ganz einfach?

Das obige ist der detaillierte Inhalt vonWelchen Einfluss hat das Schreiben von For-Schleifen in JavaScript auf die Ausführungseffizienz?. 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