Heim Web-Frontend js-Tutorial 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?

Jul 19, 2017 pm 02:40 PM
javascript js 效率

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('foreach');
 var newArrs = [];
 testArrs.forEach(function(i){
 newArrs.push(i);
 });
 console.timeEnd('foreach');
}
Nach dem Login kopieren
For-Schleife ohne Variablendeklaration:


function testNoDeclare(testArrs){
 console.time('no declare');
 var newArrs = [];
 for(var i = 0;i<testArrs.length;i++){
 newArrs.push(i);
 }
 console.timeEnd('no declare');
}
Nach dem Login kopieren
Schreiben mit Variablendeklaration


function testUseDeclare(testArrs){
 console.time('use declare');
 var newArrs = [];
 for(var i = 0,len = testArrs.length;i<len;i++){
 newArrs.push(i);
 }
 console.timeEnd('use declare');
}
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!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Apr 03, 2024 am 11:55 AM

Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung

Praktischer Leitfaden zur PyCharm-Remote-Entwicklung: Verbessern Sie die Entwicklungseffizienz Praktischer Leitfaden zur PyCharm-Remote-Entwicklung: Verbessern Sie die Entwicklungseffizienz Feb 23, 2024 pm 01:30 PM

Praktischer Leitfaden zur PyCharm-Remote-Entwicklung: Verbessern Sie die Entwicklungseffizienz

Privater Einsatz von Stable Diffusion zum Spielen mit KI-Zeichnung Privater Einsatz von Stable Diffusion zum Spielen mit KI-Zeichnung Mar 12, 2024 pm 05:49 PM

Privater Einsatz von Stable Diffusion zum Spielen mit KI-Zeichnung

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode

Beherrschen Sie Python, um die Arbeitseffizienz und Lebensqualität zu verbessern Beherrschen Sie Python, um die Arbeitseffizienz und Lebensqualität zu verbessern Feb 18, 2024 pm 05:57 PM

Beherrschen Sie Python, um die Arbeitseffizienz und Lebensqualität zu verbessern

Die Beziehung zwischen js und vue Die Beziehung zwischen js und vue Mar 11, 2024 pm 05:21 PM

Die Beziehung zwischen js und vue

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript Jan 05, 2024 pm 01:37 PM

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript

Vollständige Analyse des Java-Sammlungsframeworks: Analyse der Datenstruktur und Enthüllung des Geheimnisses effizienter Speicherung Vollständige Analyse des Java-Sammlungsframeworks: Analyse der Datenstruktur und Enthüllung des Geheimnisses effizienter Speicherung Feb 23, 2024 am 10:49 AM

Vollständige Analyse des Java-Sammlungsframeworks: Analyse der Datenstruktur und Enthüllung des Geheimnisses effizienter Speicherung

See all articles