2016-08-10 26 views
0

Node.jsには、イベントを送出するのに3時間待機するタイマーが設定されています。その時間に達すると、リスンしているすべてのブラウザーにイベントが送信されます。Node.jsとブラウザのsetTimeout/setIntervalの精度はどれくらいですか?

ブラウザは、そのようなイベントが発生する前に情報を収集し、1秒ごとにカウントダウンする残りの時間を計算し、クロックが0になるとイベントがトリガーされると予想します。

したがって、setTimeout(Node.js)を使用し、もう1台はsetInterval(ブラウザ)を使用して1秒ごとにカウントダウンします(カウントダウン)。

できますか?

  • カウントダウンが0に達するまでに、イベントは約1〜2秒のエラー範囲でトリガーされます。 (ブラウザ)。
  • Node.js setTimeoutが1秒未満の誤差範囲で呼び出せるほど正確であること。

私はタイマーが500msから1000msでもあることを読んだことがありますが、これは私のニーズにとってはうまくいきますが、私がしたいと思っているように、

正確さは十分ですか、別のソリューションを使用する必要がありますか?特にそれらの中で最も正確でなければならないNode.js側では特にそうです。

  • 代わりに、Node.jsで1秒あたり約4回実行される間隔を作成し、Dateミリ秒を計算し、イベントリストから呼び出す必要があるイベントがあるかどうかを確認します。
  • ブラウザでは、時間を同期させようとするコールバックごとに日付msを計算するようにインターバルを設定します。

答えて

1

タイマーの精度は、タイムアウト時にイベントループがどのように「ビジー」であるかに依存します。あなたのイベントループは、あなたが他の問題を持っている時間の任意の長さのためにブロックされている場合は

setTimeout(done, THREE_HOURS_IN_MS); 

あなたのようなものを望んでいた場合には十分でなければなりません。

カウントダウンの一部として1秒あたり4回サンプリングすると、大きな不正確さが発生すると予想されます。

したがって、2つのアクティビティ(サンプリングとカウントダウン)を別々にするか、手動で経過時間を維持する必要がある場合があります。

Webアプリケーションにフォーカスがないときは、タイマーの精度が低下することに注意してください。

関連する問題