我正在尝试创建一个基于服务器时间的倒计时器。
最初,我让服务器设置剩余时间,然后使用setTimeout
每秒减少一秒。
我发现了两个问题:
- 从服务器设置时间到客户端页面渲染和JavaScript开始运行之间存在延迟。延迟量取决于用户的互联网连接速度和计算机/JavaScript引擎。
- 我认为在较慢的计算机上,
setTimeout
1秒可能会滞后一点。
因此,我更改了方法,使服务器设置结束时间,客户端的JavaScript获取时间(以UTC格式)并计算剩余时间。然后在每个setTimeout
回调上执行此操作。这使得时间和倒计时完美无误。如果客户端拥有快速的计算机/JavaScript引擎,则计时器保持在页面上。如果计算机/JavaScript引擎较慢,则可能会偶尔跳过一秒钟,但时间从不出错。
到目前为止,我发现了一个问题:
- 每个客户端的时钟可能不同。
因此,如果客户端的计算机时间不正确,剩余时间可能相差几秒钟、30秒钟或甚至几天。
是否有一种方法可以使剩余时间基于服务器的结束日期完全准确?