用于创建具有高时间精度的桌面对时间敏感的浏览应用程序的最佳方法?(Best approach for

2019-10-17 12:37发布

我有开发将需要一系列的实验中测量用户响应时间的应用程序。 此应用程序将运行在大约100台计算机,因此,我曾提到,基于浏览器的做法可能是最好的削减进行安装和更新。 随着中说,现在,我读过有关定时器的浏览器的准确度,特别是JavaScript的定时器,我学习也可以从几毫秒向上10-15ms的延迟。 当用户测量它们的响应时间在屏幕上的视觉队列这种延迟可能对这些实验的精确度产生负面影响。

有没有解决这个已知的方式来获得一个Web应用程序精确的计时器正在通过JavaScript的浏览器中运行? 同样,一些这些实验需要简单的2D动画,如某用户看到多久可以保持自己的鼠标光标放在一个旋转的立方体。 我宁愿用HTML5和Javascript,我们不能使用闪光灯。

Answer 1:

真的,你不能依靠定时器的时间间隔,但你可以依靠一个新的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 );


Answer 2:

正如@dqhendricks建议,你应该使用一个新的Date对象。 但是,如果您需要这是一致的,准确的,你会需要这个可以在同一台计算机使用相同的浏览器版本并没有在后台运行上运行。

看看这个演示在Firefox和Chrome。 点击边缘移动光标出来一样快,您可以 - 我可以在FF获得最低的是6MS,我可以在Chrome中获得最低的是42MS。

这些值可以改变机器之间甚至更宽。 我成立了一个虚拟机有512MB的RAM和50%的单核帽,在FF开辟了5个标签,并试图测试 - 我已经得到了最低的是52MS。

所以,除非你可以控制用户浏览器,PC,并在后台运行的东西,我不会指望的数据是准确的。



Answer 3:

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

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



文章来源: Best approach for creating a time sensitive browser app for desktop with high time precision?