ホームページ > 記事 > ウェブフロントエンド > js はパフォーマンスの問題を考慮して回数が多すぎるループを最適化します
1,000 万個の乱数を生成したいとします。従来の方法は次のとおりです。
var numbers = []; for (var i = 0; i < 10000000; i++) { numbers.push(Math.random()); }
ただし、このコードを IE で実行すると、このスクリプトを停止するかどうかをユーザーに尋ねるウィンドウが表示されます。このような場合、最初に思い浮かぶのはループ本体の最適化です。しかし明らかに、ループ本体は非常に単純であり、最適化の余地はありません。ループ本体がクリアされても、プロンプトは依然として存在します。そこで私は結論に達しました。IE では、ループ回数が一定値を超えると、スクリプトを停止するよう求めるメッセージが表示されます。
原因は判明しましたが、解決するにはどうすればよいですか?私が最初に考えたのは、1,000 万のループをいくつかの小さなループに分割することでした。たとえば、これを 100 回に分割し、毎回 10 万回のループを実行します。
for (var i = 0, j; i < 100; i++) { for (j = 0; j < 100000; j++) { ...... } }
IE は私たちが思っているほど愚かではなく、ループの総数が依然として 1,000 万回であることを知っています。したがって、これらの 10 万サイクルは個別に実行する必要があります。 Javascript はシングルスレッドですが、setTimeout または setInterval を通じてマルチスレッドをシミュレートすることもできます。コード全体は次のように最適化されます:
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();
js 最適化ループの回数が多すぎます パフォーマンスの問題を考慮して、PHP 中国語 Web サイトの関連記事にご注意ください。