高效的秒表

6

你好,我正在使用 JavaScript 编写一个秒表工具,有一个关于效率和开销的问题。我考虑了两种制作秒表的方式:

1. 存储开始时间并不断测量自那时起经过的毫秒数。

2. 创建一个整数,在设定的间隔内增加其值。

我想知道哪种方法最有效。此外,我不确定选项 #2 是否非常准确,如果有人对此有任何建议,那将是很棒的。


1
#1更高效而且#2行不通,因为你无法保证“ticks”之间的时间。 - OverZealous
performance.now()在现代浏览器中可用。https://developer.mozilla.org/en-US/docs/Web/API/Performance/now - Aaron Hudon
2个回答

3
选项2不准确,特别是如果您的页面有其他目的的附加javascript。请采用第一种方法。

然而,使用选项#1时应考虑时钟更改。也就是说,应该比较预期更改和实际更改(具有适当的误差范围)-并在需要时进行更正。当然,这是一个非常特殊的情况。 - user166390

3

像其他人所说,选择#1。如果您想要一个每秒(或每分钟或其他时间)滴答一次的时钟,您应该估计到下一个“滴答”所需的时间,以便在正确的时间后几毫秒调用setTimeout,例如在下一个整秒之后运行:

var d = new Date();
var interval = 1020 - d.getMilliseconds();
setTimeout(fn, interval);

这样,如果一个调用的执行由于系统繁忙而延迟,下一个调用应该仍会在下一整秒之后约20毫秒被调用。


1
这仍然可能会错过超时(例如计算机进入睡眠状态);根据所需内容仍然需要超时内的增量。 - user166390
当然,浏览器中的任何内容都取决于浏览器执行脚本。您所说的“超时内的增量”是什么意思? - RobG
确保时钟在正确的时间更新的观点很有趣。然而,即使在显示上落后,如果没有这个功能,时钟仍然会显示正确的时间,不是吗? - Drew Galbraith
@Drew - 当它更新时,它将显示正确的时间,但在此之前可能会显示错误的时间(取决于更新的规律性,可能更短或更长)。想法是尽可能定期更新 - 即尽可能接近“滴答声” - 因为即使是定期更新的轻微延迟或抖动也会对用户产生影响,并导致他们失去对计时器的信心。 - RobG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接