1

我必须开发一个应用程序,在一系列实验中测量用户响应时间。该应用程序将在大约 100 台计算机上运行,​​因此我曾提到基于浏览器的方法可能是最好的减少执行安装和更新的方法。话虽如此,既然我已经了解了浏览器中计时器的准确性,特别是 javascript 计时器,我了解到可能会有几毫秒到 10-15 毫秒以上的延迟。当用户测量他们对屏幕上视觉队列的响应时间时,这种延迟会对这些实验的精度产生负面影响。

有没有一种已知的方法可以通过 javascript 为在浏览器中运行的 Web 应用程序获取精确的计时器?同样,其中一些实验需要简单的 2d 动画,例如查看用户可以将鼠标光标保持在旋转的立方体上多长时间。我更喜欢使用 HTML5 和 Javascript,我们不能使用 flash。

4

3 回答 3

2

的确,您不能依赖计时器的间隔,但可以依赖新的 Date 对象。例如:

var previousTime = new Date().getTime(); // returns milliseconds of "now"

var timer = setInterval( function() {
   var currentTime = new Date().getTime();
   var millisecondsSinceLastUpdate = currentTime - previousTime;
   previousTime = currentTime;
   alert( 'milliseconds since last update: ' + millisecondsSinceLastUpdate );
}, 1 );
于 2012-12-18T19:12:44.227 回答
1

正如@dqhendricks 建议的那样,您应该使用一个新Date对象。但是,如果您需要它保持一致和准确,则需要在具有相同浏览器版本的同一台计算机上运行它,并且没有在后台运行。

在 Firefox 和 chrome 中查看这个演示。单击边缘并尽可能快地将光标移出 - 我可以在 FF 中获得的最低值是 6MS,我可以在 Chrome 中获得的最低值是 42MS。

这些值在机器之间的差异可能更大。我设置了一个具有 512MB 内存和 50% 单核上限的虚拟机,在 FF 中打开了 5 个选项卡并尝试了测试——我得到的最低值是 52MS。

因此,除非您可以控制用户的浏览器、PC 和后台运行的东西,否则我不会指望数据是准确的。

于 2012-12-18T19:26:59.463 回答
0

如果你有新的浏览器,你可以使用 performance.now() ,它比 Date 对象提供更高的精度,但使用浏览器的其他性能问题仍然适用:(

http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-now

于 2012-12-19T03:43:23.790 回答