setInterval
関数はほとんどシングルスレッドであることを私は知っています。しかし、時間を50ミリ秒のような非常に小さな値に設定すると、次のようになります。
setInterval(function()
{
// do really heavy stuff
}, 50);
次に、最初に生成されたイベントが時間内に終了しない可能性があり、2番目のイベントがブラウザのキューに入れられ、次に3番目、4番目などに入れられると思います。したがって、基本的に、これはブラウザのキューが非常に速く大きくなり、明らかに良くないことを意味します(それは...ですか? )
これまでのところ、次の2つのソリューションがあります。
1)最初のイベントが終了するのを待ってから、(タイムアウトを使用して)2番目のイベントを呼び出します。
var func = function()
{
setTimeout(function()
{
// do really heavy stuff and when it's finished call again
func();
}, 50)
}
2)イベントの状態を監視するフラグを作成します。
var isIntervalInProcess = false;
setInterval(function()
{
if ( isIntervalInProcess )
return false;
isIntervalInProcess = true;
// do really heavy stuff
isIntervalInProcess = false;
}, 50);
重複するイベントを取り除くためのこれらのベストプラクティスはありますか?