我必须开发一个应用程序,在一系列实验中测量用户响应时间。此应用程序将在大约100台计算机上运行,因此我提到基于浏览器的方法可能最好减少执行安装和更新。话虽如此,现在我已经了解了浏览器中定时器的准确性,特别是javascript定时器,我知道可能会有几毫秒到10-15ms之间的延迟。当用户测量他们对屏幕上视觉队列的响应时间时,这种延迟会对这些实验的精确度产生负面影响。
有没有一种已知的方法来获取通过javascript在浏览器中运行的Web应用程序的精确计时器?同样,这些实验中的一些需要简单的2D动画,例如查看用户将鼠标光标保持在旋转立方体上多长时间。我更喜欢使用HTML5和Javascript,我们不能使用flash。
答案 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