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

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

高洛峰
高洛峰オリジナル
2017-02-04 13:18:531314ブラウズ

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 サイトの関連記事にご注意ください。

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