サイトに複数のタブを開いているのに、なぜSettimeOutがスピードアップするのですか?

StackOverflow https://stackoverflow.com/questions/1157409

質問

毎秒カウントダウンするタイマーがあります。ユーザーが私のサイトの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 ?>();

これが観察された動作を変更した場合、それは私が念頭に置いているシナリオを主張します。 (そしておそらく問題に対処する方法を提供します。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top