ホームページ  >  記事  >  ウェブフロントエンド  >  js はパフォーマンスの問題を考慮して回数が多すぎるループを最適化します_javascript スキル

js はパフォーマンスの問題を考慮して回数が多すぎるループを最適化します_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 18:09:411378ブラウズ

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"); 🎜>}
開始 ()

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。