最好的方式做一个手表在javascript与服务器时间同步



我想让一个js手表:

  • 开始时间是服务器时间(服务器将在页面的源代码中提供)。
  • 每秒更新。
  • (优先选择,非强制)兼容最新版本的gecko, webkit, presto和IE。

我已经检查了这个的许多实现,但我想知道哪一个是最有效的。即:从PC中占用较少资源的方法,以及在所有存在的方法中更精确的方法。

每秒滴答的时钟基本上是动画,因此可以从递归requestAnimationFrame(回退到setTimeout)中受益。

var previousTime = 0;
function update(time) {
    if (time - previousTime >= 1000) {
        redrawClock(time);
        previousTime = time;
    }
    requestAnimationFrame(update);
}

对于setInterval,您必须在每次迭代中创建一个Date对象,因为setInterval自己的延迟可能比它的形式值要长。参见John Resig关于JavaScript中的计时器的精彩文章。

requestAnimationFrame则相反:

  1. 更高效,针对任务进行了优化。
  2. 为它的回调提供一个准确的时间戳。

最新更新