4

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

私はもともとサーバーに残り時間を設定させていましたが、setTimeout時間を減らすために1秒間実行しました。

これには2つの問題が見つかりました:

  1. クライアントのページがレンダリングされて JavaScript の実行が開始されるまで、サーバーが時間を設定するための遅延があります。ラグの量は、ユーザーのインターネット接続とコンピューター/JavaScript エンジンの速度によって異なります。
  2. setTimeout低速のコンピューターでは 1 秒が少し遅れている可能性があると思います。

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

これまでのところ、この方法で 1 つの問題が見つかりました。

  1. すべてのクライアントの時計は異なる場合があります。

そのため、残りの時間は数秒、または 30 秒、またはクライアントのコンピューターの時刻が正しくない場合は何日もかかる場合があります。

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

4

1 に答える 1

0

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

于 2010-12-19T19:22:37.410 に答える