Heim > Web-Frontend > js-Tutorial > Hauptteil

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

伊谢尔伦
Freigeben: 2017-07-19 14:40:57
Original
2428 Leute haben es durchsucht

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++;
}
Nach dem Login kopieren

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;);
}
Nach dem Login kopieren
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;);
}
Nach dem Login kopieren
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;);
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

Testergebnisse

Nach 10 Tests wurden die folgenden Ergebnisse erhalten

foreach不写声明写声明
2372.891ms672.530ms743.974ms
2431.821ms710.275ms805.676ms
2422.448ms729.287ms741.014ms
2330.894ms730.200ms755.390ms
2423.186ms703.255ms769.674ms
2379.167ms689.811ms741.040ms
2372.944ms712.103ms710.524ms
2316.005ms726.518ms726.522ms
2535.289ms733.826ms747.427ms
2560.925ms793.680ms817.098ms
平均值平均值平均值
2414.56ms720.15ms755.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)
{
被执行的代码块
}
Nach dem Login kopieren
  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);
}
Nach dem Login kopieren
Aber! Gemäß der obigen grammatikalischen Anleitung können wir es auch so schreiben


for(var i=10;i--;){
console.log(i);
}
Nach dem Login kopieren
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
}
Nach dem Login kopieren
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]
}
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage