同步客户端时间(续)

08 年我就有了这样的 想法,却到今天才开始实践。

公司电脑时间错了好多,但我的账户没有 Internet 同步的权限,遂手动校准。

国家授时中心 校准时,发现其服务器时间的 跳跃是受客户端时间影响的,当客户端时间发生修改时,页面上显示的服务器时间也跟着 偏差。

后来到台湾的 國家時間與頻率標準實驗室 发现没有这个问题。

研究了两者的代码,发现跟第一观感不同的是,这两者我更赞赏大陆的做法了,虽然有明显的可见缺陷。 下面简单分析下两者的实现思想及各自的优缺点。

台湾的是使用 setInterval 实现了一个定时器,这个定时器考虑到了调用函数的时间消耗, 但是 setInterval 或 setTimeout 本身的不确定性,随着跳跃时间变长,页面显示的服务器 时间便有非常大的偏差,尤其在 IE 浏览器中(几十分钟内,Firefox偏差数秒,IE7偏差数分钟)。

而大陆的实现则使用服务器的初始时间,但使用客户端的频率进行跳跃(并在 1 秒中检查 10 次, 避免跳秒问题)。这样即使经过长时间的跳跃,同样能保持较高的准确度。但问题是,当客户端 时间发生修改时,所谓的服务器时间也会收到影响。

于是我结合两者各自的优点,避开他们的缺点,实现了一个 校时器。 他使用客户端的跳秒,但是当客户端发生时间不正常的跳跃时,自动修正客户端和服务器端之间的 时间差。

Help
[count]gg 跳转到第 [count] 行,默认第 1 行。
[count]G 跳转到第 [count] 行,默认最后一行。
[count]j 向下跳转 [count] 行,默认跳转一行。
[count]k 向上跳转 [count] 行,默认跳转一行。
/ 开始搜索。按 <Esc> 退出。
gh 跳转到首页。
gb 跳转到博客首页。
gw 跳转到 Wiki 首页。
gt 跳转到我的 Twitter Profile 页。
gp 跳转到我的 Github Profile 页。
? 打开帮助。按 <Esc> 退出。