1,000 万個の乱数を生成するとします。一般的なアプローチは次のとおりです。
varnumbers = [];
for (var i = 0; i numbers.push(Math.random()); }
ただし、IE でこのコードを実行すると、このスクリプトを停止するかどうかをユーザーに尋ねるウィンドウが表示されます。このような場合、最初に思い浮かぶのはループ本体の最適化です。しかし明らかに、ループ本体は非常に単純であり、最適化の余地はありません。ループ本体がクリアされても、プロンプトは依然として存在します。そこで私は結論に達しました。IE では、ループ回数が一定値を超えると、スクリプトを停止するよう求めるメッセージが表示されます。
原因は判明しましたが、解決するにはどうすればよいですか?私が最初に考えたのは、1,000 万のループをいくつかの小さなループに分割することでした。たとえば、これを 100 回に分割し、毎回ループを 10 万回実行します。
for (var i = 0, j; i for (j = 0; j 。 ..
}
}
IE は、総サイクル数がまだ 1,000 万であることを知っています。したがって、これらの 10 万サイクルは個別に実行する必要があります。 Javascript はシングルスレッドですが、setTimeout または setInterval を通じてマルチスレッドをシミュレートすることもできます。コード全体は次のように最適化されます。
var数値 = [];
関数 begin() {
for (var i = 0; i numbers.push(Math.random()); 🎜> if (numbers .length setTimeout(begin, 0)
} else {
alter("complete"); 🎜>}
開始 ()