サーバー時間を使用したJavaScriptカウントダウンタイマー
-
11-10-2019 - |
質問
サーバーの時間に基づいたカウントダウンタイマーを作成しようとしています。
私はもともとサーバーに時間を設定していましたが、 setTimeout
1秒間、時間が短縮されます。
これで2つの問題が見つかりました:
- クライアントのページがレンダリングされ、JavaScriptが実行されるまで、時間を設定するサーバーから遅れがあります。遅延量は、ユーザーのインターネット接続とコンピューター/JavaScriptエンジンの速度に依存します。
- おもう
setTimeout
1秒が遅いコンピューターで少し遅れをとっている可能性があります。
サーバーが終了時間を設定し、クライアントのJavaScriptが時間をかけて(UTCで)時間をかけて残りの時間を計算するように変更しました。それはすべてでこれを行います setTimeout
折り返し電話。これにより、時間とカウントダウンが完璧になります。クライアントが高速コンピューター/JavaScriptエンジンを持っている場合、タイマーはページにとどまります。コンピューター/JavaScriptエンジンが遅い場合、あちこちで2番目のスキップがスキップされる可能性がありますが、時間がかかることはありません。
これまでにこの方法で1つの問題が見つかりました:
- すべてのクライアントのクロックが異なる場合があります。
したがって、クライアントの時間がコンピューターで正しくない場合は、残っている時間は数秒、30秒、さらには休暇です。
サーバーの終了日に基づいて正確に時間を残すことができる方法はありますか?
解決
どのような解像度が必要かはわかりませんが、ネットワークとページのレンダリングレイテンシーを考えると、クライアントサーバー契約を1秒よりもはるかに優れたものにすることは不可能になるでしょう。 5秒または10秒ごとにAJAX投票を行い、それに応じてタイマーを調整することをお勧めします。もあります 彗星 これは本質的に「逆」Ajaxであり、クライアントに時代を押し進めることができます。しかし、いずれにせよ、あなたはまだネットワークとレンダリングのレイテンシを持っています。
所属していません StackOverflow