Heim  >  Artikel  >  Web-Frontend  >  js optimiert Schleifen mit zu vielen Wiederholungen unter Berücksichtigung von Leistungsproblemen

js optimiert Schleifen mit zu vielen Wiederholungen unter Berücksichtigung von Leistungsproblemen

高洛峰
高洛峰Original
2017-02-04 13:18:531313Durchsuche

Angenommen, Sie möchten 10 Millionen Zufallszahlen generieren:

var numbers = []; 
for (var i = 0; i < 10000000; i++) { 
  numbers.push(Math.random()); 
}

Bei der Ausführung dieses Codes im IE erscheint jedoch ein Fenster, in dem der Benutzer gefragt wird, ob er dieses Skript stoppen soll . . Wenn das passiert, denkt man als Erstes an die Optimierung des Schleifenkörpers. Aber offensichtlich ist der Schleifenkörper sehr einfach und es gibt keinen Raum für Optimierung. Auch wenn der Schleifenkörper gelöscht wird, ist die Eingabeaufforderung weiterhin vorhanden. Daher bin ich zu dem Schluss gekommen: Sobald im IE die Anzahl der Schleifen einen bestimmten Wert überschreitet, wird eine Aufforderung zum Stoppen des Skripts angezeigt.

Die Ursache wurde gefunden, wie kann man sie beheben? Mein erster Gedanke war, die 10 Millionen Schleifen in mehrere kleinere Schleifen aufzuteilen. Teilen Sie es beispielsweise in einhundert Mal auf und führen Sie jedes Mal einhunderttausend Schleifen aus:

for (var i = 0, j; i < 100; i++) { 
  for (j = 0; j < 100000; j++) { 
    ...... 
  } 
}

IE ist nicht so dumm wie wir denken, er weiß, dass die Gesamtzahl der Schleifen immer noch zehn Millionen beträgt. Daher müssen diese hunderttausend Zyklen separat ausgeführt werden. Obwohl Javascript Single-Threading ist, kann es über setTimeout oder setInterval auch Multithreading simulieren. Der gesamte Code ist wie folgt optimiert:

var numbers = []; 
function begin() { 
  for (var i = 0; i < 100000; i++) { 
    numbers.push(Math.random()); 
  } 
  if (numbers.length < 10000000) { // 是否已完成 
    setTimeout(begin, 0); 
  } else { 
    alert("complete"); 
  } 
} 
begin();

Weitere js-Optimierungsschleifen mit zu vielen Zeiten. Bitte beachten Sie die PHP-Chinese-Website für verwandte Artikel!

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