4

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

我最初让服务器设置了剩余时间,并且只做了setTimeout1 秒来减少时间。

我发现了两个问题:

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

我更改了它,以便服务器设置结束时间,客户端上的 JavaScript 将花费时间(以 UTC 为单位)并计算剩余时间。然后它将在每个setTimeout回调中执行此操作。这使得时间和倒计时完美。如果客户端具有快速的计算机/JavaScript 引擎,则计时器将停留在页面上。如果计算机/JavaScript 引擎速度较慢,您可能会看到这里和那里跳过一秒钟,但时间永远不会关闭。

到目前为止,我发现此方法存在 1 个问题:

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

因此,如果客户的计算机上的时间不正确,剩下的时间可能是几秒钟或 30 秒,甚至是休息几天。

有没有办法让我根据服务器的结束日期准确地剩余时间?

4

1 回答 1

0

我不知道你需要什么样的分辨率,但考虑到网络和页面渲染延迟,不可能让客户端-服务器协议比一秒好得多。我建议您每 5 或 10 秒进行一次 ajax 轮询,并相应地调整您的计时器。还有comet,它本质上是“反向”ajax,可以将时间推送给客户端。但无论哪种方式,您仍然需要应对网络和渲染延迟。

于 2010-12-19T19:22:37.410 回答