2010-12-19 11 views
4

私はサーバー上の時間に基づいてカウントダウンタイマーを作成しようとしています。JavaScriptカウントダウンタイマーサーバー時間を使用

私はもともとサーバーに時間を設定していましたが、ちょうどsetTimeoutを1秒間実行すると時間が減少しました。

  1. クライアントのページがレンダリングされるとJavaScriptの実行を開始するまでの時間を設定し、サーバーからの遅れがあります:

    私はこれで2の問題を発見しました。遅れの量は、ユーザーのインターネット接続とコンピュータ/ JavaScriptエンジンの速度に依存します。
  2. 私は遅いコンピュータの上で少し遅れているかもしれないと思うのは、setTimeoutです。

サーバーが終了時刻を設定し、クライアントのJavaScriptが(UTCで)時間がかかり、残りの残り時間を計算するように変更しました。その後、すべてsetTimeoutコールバックでこれを行います。これにより、時間とカウントダウンが完璧になります。クライアントに高速のコンピュータ/ JavaScriptエンジンがある場合、タイマーはページにとどまります。コンピュータ/ JavaScriptエンジンの速度が遅い場合は、ここをスキップすることがありますが、時間は決して切れません。

私はこれまでのところ、この方法では1つの問題を発見:

  1. をすべてのクライアントのクロックが異なる場合があります。

したがって、クライアントの時刻がコンピュータで正しくない場合、残り時間は数秒、30秒、または休日になることがあります。

サーバの終了日に基づいて正確な時刻を設定する方法はありますか?

答えて

0

どのような解像度が必要かわかりませんが、ネットワークとページのレンダリングのレイテンシを考慮すると、クライアントとサーバーの間の合意を1秒よりもずっと良くすることは不可能になります。私は5秒または10秒ごとにajaxポーリングを行い、それに応じてタイマーを調整することをお勧めします。 「comet」も本質的に「逆」のAjaxであり、クライアントに時間を送ることができます。しかしどちらの方法でも、ネットワークとレンダリングの待ち時間は依然としてあります。

関連する問題