为桌面创建时间敏感的浏览器应用程序的最佳方法具有高时间精度?

时间:2012-12-18 19:03:47

标签: javascript web-applications browser timer

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

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

3 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:1)

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

在firefox和chrome中查看此demo。点击边缘并尽可能快地将光标移出 - 我在FF中可以获得的最低值是6MS,我在Chrome中可以获得的最低值是42MS。

这些值在机器之间可以变化得更大。我设置了一个拥有512MB RAM和50%单核心帽的虚拟机,在FF中打开了5个标签并尝试了测试 - 我得到的最低值是52MS。

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

答案 2 :(得分:0)

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

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