0

我正在研究各种 IE/Windows 组合的 JavaScript 计时器分辨率。在我的 IE9/Vista 机器上,我得到了 17 毫秒的计时器分辨率(通过运行这个测试)。我无法访问这些其他组合。(我不知道这是否应该是一个社区 wiki 问题,但无论如何都是这样)

           XP       Vista      Win7
           --        --         --
IE7        ?          ?         ?
IE8        ?          ?         ?
IE9        ?          ?         ?         
4

2 回答 2

0

在任何操作系统上都没有针对标准计时调用的准确计时器分辨率(这包括 Javascript——尽管我确实注意到评论和您链接的测试平均运行时间约为 4 毫秒,这表明一些复杂性超出了我提供的答案)。

通常,任何编程语言的标准计时函数的计时器调用都与操作系统的低分辨率计时器的底层分辨率相关联,不能保证在精确的毫秒数后递增,但在所有常见的情况下大约为 15 毫秒操作系统(包括所有版本的 Linux,以及 Windows 和 OSX)。

这意味着操作系统将间歇性地检查任何正在运行的程序发出的任何计时请求的时间是否已到假设调用了低分辨率计时函数),而不管这些脚本使用的编程语言是什么/程序已编写。如果是,则系统为所讨论的目标程序的下一个时间片安排相应的回调函数。

平均而言,低分辨率计时器大约每 15 毫秒递增一次 - 但这是一个平均值;它随定时器的任何单独增量而变化,通常高端可达 25 毫秒,低端可达约 8 毫秒。这就是低分辨率系统计时器的本质——它对整个系统(和单个程序)的性能影响非常小,但它的精度仅为~15 ms。换句话说,精度为 1 毫秒(这就是为什么标准计时函数,例如 Javascript 计时函数,具有毫秒精度的原因),但精度仅为约 15 毫秒,给或取。精度和准确度是不同的。

低分辨率计时器以这种方式运行的原因正是我提到的原因——因此计时功能对系统的影响很小。存在更高分辨率的计时功能,但更加密集,需要许多 CPU 周期来测试和更新计时器。最高精度的定时器需要额外的物理硬件组件以及硬件中断,有时需要任务关键程序的独占高优先级访问。

底线是 Javascript 计时函数并不准确。平均而言,它们会在目标时间的大约 15 毫秒内触发,有时更少,有时更多。

于 2012-07-08T00:56:29.850 回答
0

经过进一步研究,我发现在 Window 7 之前,IE javascript 计时器只是调用了 windows 系统计时器,它是每秒 64 个滴答声 - 或 15.6 毫秒间隔。在 Windows 7 中,实际上有两个计时器设置。插入时适用的 4 毫秒计时器,以及拔出时适用的旧 15.6 毫秒计时器。这是一种省电措施,实际上可以从高级电源配置设置界面进行配置-因此您可以在所有情况下将您的个人机器切换为15.6ms或4ms,或者如果您想反常-在高功耗时插上电源时,您已拔出电源且功耗低。

于 2012-07-11T19:59:09.277 回答