私は配列に多くの値をプッシュする必要がアプリケーションを持っているので、私は、実行時間をテスト:のsetTimeout速く
var st = new Date().getTime();
var a = [];
for (var i = 0; i < 20971520; i++) {
a.push(i);
}
var ed = new Date().getTime();
console.info((ed - st)/1000);
console.info(a.length);
私は直接FirefoxのコンソールとChromeコンソールでコードを実行しますそれは37 seconds
です。実行中はマウスでさえもChromeで移動できますが、インタラクティブな効果はありません。
その後、私はコードを変更:
function push() {
var st = new Date().getTime();
var a = [];
for (var i = 0; i < 20971520; i++) {
a.push(i);
}
var ed = new Date().getTime();
console.info((ed - st)/1000);
console.info(a.length);
}
var tr = setTimeout(push, 50);
簡素化は、それが0.844 second
の費用がかかり、関数内のコードを入れて、setTimeout
を使用してそれを呼び出します。そして実行中に、私はChromeで正常に操作できます。
ここで何が起こっているの?
私はsetTimeout
がブラウザにUIジョブを実行するためのコントロールを置くことを知っています。これによりページが応答しやすくなります。たとえば、私はページのmousemove中にいくつかの計算を行うとき、私はそれがUIをブロックしないように遅延実行された計算を入れます。
しかし、なぜ同じコードの実行時間が短縮されるのでしょうか?
多分それはちょうどキャッシングです。実行順序を入れ替えようとしましたか?つまり、最初にsetTimeoutバリアントを実行してから、もう一方を実行しましたか? –
'push()'を呼び出すとどうなりますか? – Freez
タイムアウトの有無にかかわらず同じ時間がかかります。 – DoctorMick