2017-02-18 1 views
0
<script> 
    var num=10; 

    while(num<=20000000){ 
    document.write(num+'<br/>'); 
    num++; 
    } 
</script> 

Wie Sie oben sehen können num beginnt bei 10 und geht bis 20 Millionen. Aber, dieses Programm funktioniert nicht auf meinem Computer. Mein Computer erstarrt, nachdem dieser Code einige Sekunden lang ausgeführt wurde. Ist 20 Millionen sehr großer Wert, den Javascript nicht behandeln kann oder ihr Problem mit dem Browser-Speicher ist, über den ich nicht weiß. Wenn ich dieselbe Logik in c verwende, funktioniert es. Was ist das Problem hier?Javascript-Programm funktioniert nicht mehr für große Werte

My computer configuration : 

Main Memory : 2GB 

processor : Intel Quad core processor (up to 2.66 GHz) 
+0

laufen können Viewer kann nicht zwanzig Millionen Zeilen gleichzeitig in "Dokument" lesen. Die Verwendung der while-Schleife ist nicht notwendig. Fügen Sie '# text' Knoten' inkrementell' hinzu. – guest271314

+0

Das Ändern des DOM ist teuer. Sie können das Glück haben, die Saite zu verketten und sie auf einmal hinzuzufügen (oder jede Million, vielleicht). – mrlew

+0

Siehe [jQuery - Können Threads/asynchron ausgeführt werden?] (Http://stackoverflow.com/questions/26068821/jquery-can-threads-asynchronous-be-done/) 10.000 Elemente gleichzeitig bearbeiten 250 Elemente; [So lösen Sie Uncaught RangeError beim Download großer Größe json] (http://stackoverflow.com/questions/39959467/how-to-solve-uncaught-rangeerror-when-download-large-size-json/) Prozess Download von 189.8 MB (189.778.220 Bytes) Datei – guest271314

Antwort

2

Der eigentliche Flaschenhals hier wäre der Browser Rendering. Vergessen Sie nicht, dass Sie dem DOM eine große Menge an Daten hinzufügen, die alle behandelt werden müssen.

Wenn Sie wollen einfach nur Schleifen ausprobieren und in Javascript spielen, um vielleicht die bessere Wahl wäre NodeJS zu verwenden, wo Sie Ihr Programm außerhalb der Browser-Umgebung

var timerLabel = 'running_loop'; 
 
function loop() { 
 
    var num = 5; 
 
    while (++num < 20000000) { 
 
    } 
 
} 
 

 
// starts a timer 
 
console.time(timerLabel); 
 
loop(); 
 
// marks in ms how long the operation took 
 
console.timeEnd(timerLabel);

Verwandte Themen