使用服务器时间的JavaScript倒计时计时器

4

我正在尝试创建一个基于服务器时间的倒计时器。

最初,我让服务器设置剩余时间,然后使用setTimeout每秒减少一秒。

我发现了两个问题:

  1. 从服务器设置时间到客户端页面渲染和JavaScript开始运行之间存在延迟。延迟量取决于用户的互联网连接速度和计算机/JavaScript引擎。
  2. 我认为在较慢的计算机上,setTimeout 1秒可能会滞后一点。

因此,我更改了方法,使服务器设置结束时间,客户端的JavaScript获取时间(以UTC格式)并计算剩余时间。然后在每个setTimeout回调上执行此操作。这使得时间和倒计时完美无误。如果客户端拥有快速的计算机/JavaScript引擎,则计时器保持在页面上。如果计算机/JavaScript引擎较慢,则可能会偶尔跳过一秒钟,但时间从不出错。

到目前为止,我发现了一个问题:

  1. 每个客户端的时钟可能不同。

因此,如果客户端的计算机时间不正确,剩余时间可能相差几秒钟、30秒钟或甚至几天。

是否有一种方法可以使剩余时间基于服务器的结束日期完全准确?

1个回答

0
我不知道您需要什么样的分辨率,但考虑到网络和页面渲染延迟,要想让客户端和服务器达成一致几乎是不可能的,最好只能做到每秒一次。我建议您每隔5或10秒进行一次ajax轮询,并相应地调整计时器。也有一种名为comet的技术,它实际上是“反向”ajax,可以将时间推送到客户端。但无论如何,您仍然要处理网络和渲染延迟问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接