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

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

上記のように、numは10で始まり、2,000万までになります。しかし、このプログラムは私のコンピュータでは動作しません。私のコンピュータはこのコードを数秒間実行するとフリーズします。 2000万人がJavaScriptを扱うことができない非常に大きな価値か、それとも私が気づいていないブラウザのメモリに関する問題ですか?同じロジックをC言語で実行すると、動作します。ここで何が問題なの?大きな値の場合、javascriptプログラムの動作が停止しました

My computer configuration : 

Main Memory : 2GB 

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

を、あなたのプログラムを実行することができる場所NodeJSを使用することですViewerは一度に 'document'の2千万行を読むことができません。 'while'ループを使う必要はありません。 '#text'ノードを' document'にインクリメンタルに追加してください。 – guest271314

+0

DOMの変更は高価です。あなたは、ストリングをconcateningし、すぐに(または、おそらく各百万、)それを追加するより良い運を持つことができます。 – mrlew

+0

[jQuery - スレッド/非同期はできますか?](http://stackoverflow.com/questions/26068821/jquery-can-threads-asynchronous-be-done/)では、一度に250アイテムずつ10,000アイテムを処理します。 [大規模なjsonをダウンロードするとUncaught RangeErrorを解決する方法](http://stackoverflow.com/questions/39959467/how-to-solve-uncaught-rangeerror-when-download-large-size-json/)189.8のプロセスダウンロードMB(189,778,220バイト)ファイル – guest271314

答えて

2

ここで実際のボトルネックはブラウザのレンダリングになります。 DOMにすべて大量のデータを追加する必要があることを忘れないでください。

あなただけのループを試してみるとJavascriptで遊んしたい場合は、おそらくより良い選択は、あなたがブラウザ環境の外で

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);

関連する問題