サイトに複数のタブを開いているのに、なぜSettimeOutがスピードアップするのですか?
-
18-09-2019 - |
質問
毎秒カウントダウンするタイマーがあります。ユーザーが私のサイトの3つまたは4つのタブを開くまでうまく機能します。その時点で、最新のタブのタイマーが2倍または三重速度になります。現在、IE8のバグのみを再現できます。私は以前にSetIntervalを使用していましたが、Firefoxのバグも再現できました。
私は実際にFBJ(FacebookのJavaScript)を使用しているので、擬似コードを与えるだけです。
function countDown() {
...
setTimeout(function() { countDown() }, 1000);
}
countDown();
しかし、私が本当に探しているのはより理論的です。ブラウザはSetIntervalで「Catch Up」を試してみることができることを知っていますが、複数のタブがSetimeOutのこの動作を引き起こすにはどうすればよいですか?
解決
その全体の状況は非常に奇妙です。それが理にかなっていることを思い起こさせる唯一のシナリオは、ブラウザがSetIntervalと同じ自己依存性の入植の期間を「スムーズ」しようとしているシナリオと、それぞれのウィンドウのタイマーを実際に混同しているコードをそれぞれに混同しているコードです。他の。
特にFacebookが関与している場合、それが実行可能かどうかはわかりませんが、興味深いテストは、各インスタンスにランダム化された名前を与えることです。 countDown
機能し、次のような違いがあるかどうかを確認します。
<?php $timerTag = rand(1, 1000); ?>
function countDown<?php echo $timerTag ?>() {
...
setTimeout(function() { countDown<? php echo $timerTag ?>() }, 1000);
}
countDown<?php echo $timerTag ?>();
これが観察された動作を変更した場合、それは私が念頭に置いているシナリオを主張します。 (そしておそらく問題に対処する方法を提供します。)
所属していません StackOverflow