人間は 1 秒の 20 秒から 10 分の 1 の間のどこかで時間間隔を認識し始めるため、1 ミリ秒の値でポーリングを試みることは必要でもありませんし、望ましいことでもありません (最新のブラウザーはとにかく 5 ミリ秒または 10 ミリ秒に切り上げます)。50 や 100 などの値がより適切です。
また、次のような呼び出しsetTimeout
ではなく、連鎖した一連の呼び出しを使用することを強くお勧めします。setInterval
function onVideoReady(callback) {
// Do first check as soon as the JavaScript engine is available to do it
setTimeout(checkVideoReady, 0);
// Our check function
function checkVideoReady() {
if (videoIsReady) {
// The video is ready, notify calling code
callback();
}
else {
// Not ready yet, wait a 10th of a second
setTimeout(checkVideoReady, 100);
}
}
}
...次のように使用します。
onVideoReady(function() {
// The video is ready, do something
});
setTimeout
の代わりに連鎖シリーズを推奨する理由は次のsetInterval
とおりです。
繰り返しごとに遅延を簡単に変更できます。たとえば、上記の例では、最初はできるだけ早くチェックを起動し、その後は毎回 100 ミリ秒後にチェックを起動します。それよりもタイミングでより複雑なことを行うことができます。柔軟性があります。
コードは次のループを明示的にトリガーする必要があるため、うっかり複数回実行してしまうことははるかに困難です。
setInterval
最後の呼び出しの開始からインターフェイスを測定するか、呼び出しの終了からインターフェイスを測定するかについては、ブラウザーによって異なります。上記のようなパターンを使用すると、最後のチェックの最後からのものであることが常に確信できます。
次の間隔が発生する予定のときにコードがまだ実行されている場合は、スキップされます。これにより、少なくとも一部のブラウザーではギャップが発生する可能性があります (たとえば、100 ミリ秒ごとに何かを実行していて、前のループが完了するまでに 102 ミリ秒かかる場合、次のループはできるだけ早く開始されず、残りの 98 ミリ秒を待機します)。
もちろん、それはあなた次第です。上記は、一連の呼び出しと同じようにsetInterval
and呼び出しでも簡単に実行できます。clearInterval
setTimeout