在JavaScript中,是否有时间源具有一致的毫秒级分辨率?
就函数的分辨率(以毫秒为单位)而言,JavaScript中的Date对象在不同的计算机上和不同的浏览器上执行不同的操作。我发现大多数计算机在IE上的分辨率约为16毫秒,而Chrome或者Firefox的分辨率可能高达1毫秒。
普通JavaScript或者IE是否有另一个可用的功能可以更好地解决时间问题?我正在尝试捕获和记录keyDown
和keyUp
时间(以毫秒为单位),并且需要在+ / 10 ms或者更短的范围内。
要查看说明,请查看此页面的"新date()的分辨率"部分。有一个带有测试按钮的表,用于评估当前计算机/浏览器的JavaScript时间分辨率,以毫秒为单位。有趣的是,Chrome通常会获得1ms的分辨率。
http://www.merlyn.demon.co.uk/js-dates.htm#OV
我的目标是寻找一种JavaScript日期时间方法,该方法将在所有浏览器中提供10ms以下的分辨率。替换或者改进Date()的东西。
解决方案
AFAIK,毫秒数与JavaScript中的毫秒数一样好。这是Date对象的Mozilla.org文档。那里没有任何东西表示分辨率更高的东西。
由于我们提到的是Internet Explorer,因此我假设我们正在Windows上工作。我们获得的15 ms分辨率可能与Windows系统计时器分辨率有关。
我还注意到通过在Windows上运行Java程序,系统计时器的分辨率约为16毫秒左右。 (使用System.currentTimeMillis()
方法。)
我进行了充分的搜索,以确定是否可以在Windows中找到有关系统计时器分辨率的任何信息,并且能够从TechNet找到指向Inside Windows NT High Resolution Timers的链接。它提到了有关Windows系统计时器的分辨率的一些信息:
Windows NT bases all of its timer support off of one system clock interrupt, which by default runs at a 10 millisecond granularity. This is therefore the resolution of standard Windows timers.
(我假设Windows XP和Vista仍具有相同的计时器,请认为它是NT的后代。)
除非Firefox和Chrome实施了自己的高分辨率计时器,否则我认为从Windows平台上的浏览器可以获得的最佳分辨率约为10毫秒。
尽管与该问题无关,但我也确实找到了有关Windows上高分辨率计时器的MSDN文章:为Windows安装了一个持续更新的高分辨率时间提供程序
在台式机上实现高分辨率定时仍然是一个悬而未决的话题。
当今流行的操作系统仅为我们提供10 ms的粒度,因为这是其时钟计时器中断的频率。例如,我们还将在Linux联机帮助页中找到10毫秒。浏览器将仅公开操作系统提供的计时器,并增加了浏览器的内部开销。
也就是说,可以实现更高的粒度。但是所有这些技术都是特定于硬件设置的,我们不能期望它们会在不久的将来通过JavaScript公开。