08 年我就有了这样的 想法,却到今天才开始实践。
公司电脑时间错了好多,但我的账户没有 Internet 同步的权限,遂手动校准。
到 国家授时中心 校准时,发现其服务器时间的 跳跃是受客户端时间影响的,当客户端时间发生修改时,页面上显示的服务器时间也跟着 偏差。
后来到台湾的 國家時間與頻率標準實驗室 发现没有这个问题。
研究了两者的代码,发现跟第一观感不同的是,这两者我更赞赏大陆的做法了,虽然有明显的可见缺陷。 下面简单分析下两者的实现思想及各自的优缺点。
台湾的是使用 setInterval 实现了一个定时器,这个定时器考虑到了调用函数的时间消耗, 但是 setInterval 或 setTimeout 本身的不确定性,随着跳跃时间变长,页面显示的服务器 时间便有非常大的偏差,尤其在 IE 浏览器中(几十分钟内,Firefox偏差数秒,IE7偏差数分钟)。
而大陆的实现则使用服务器的初始时间,但使用客户端的频率进行跳跃(并在 1 秒中检查 10 次, 避免跳秒问题)。这样即使经过长时间的跳跃,同样能保持较高的准确度。但问题是,当客户端 时间发生修改时,所谓的服务器时间也会收到影响。
于是我结合两者各自的优点,避开他们的缺点,实现了一个 校时器。 他使用客户端的跳秒,但是当客户端发生时间不正常的跳跃时,自动修正客户端和服务器端之间的 时间差。