我想让一个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
则相反:
- 更高效,针对任务进行了优化。
- 为它的回调提供一个准确的时间戳。