我正在研究各种IE / Windows组合的JavaScript计时器分辨率。在我的IE9 / Vista盒子上,我得到一个17ms的计时器分辨率(从运行this test。)我无法访问这些其他组合。 (我不知道这应该是一个社区维基问题,但无论如何都要进行)
XP Vista Win7
-- -- --
IE7 ? ? ?
IE8 ? ? ?
IE9 ? ? ?
答案 0 :(得分:0)
在标准计时呼叫的任何操作系统上都没有准确的计时器分辨率(这包括Javascript - 虽然我注意到评论和您链接的测试平均运行时间约为4毫秒,这表明一些超出我提供的答案的复杂性。
通常,对任何编程语言的标准定时函数的定时器调用都与操作系统的低分辨率定时器的基础分辨率相关联,该分辨率不能保证在精确的毫秒数后递增,但是在所有常见操作系统(包括所有版本的Linux,以及Windows和OSX)上大约 15 ms。
这意味着操作系统将间歇性地检查任何正在运行的程序发出的任何时间请求的时间是否已到达(假设该值低)无论编写脚本/程序的编程语言如何,都会调用分辨率计时功能。如果是,则系统为相关目标程序的下一个时间片安排相应的回调函数。
平均而言,低分辨率计时器大约每15毫秒递增一次 - 但这是一个平均值;它随着定时器的任何单独增量而变化,通常高端为25 ms,低端为~8 ms。这是低分辨率系统定时器的本质 - 它对整个系统(和单个程序)的性能影响很小,但它的精度只有~15 ms。换句话说,精度是1 ms(这就是标准时序功能,例如Javascript计时功能,具有ms精度),但精度仅为〜15 ms,给予或接受。精度和准确度不同。
低分辨率定时器以这种方式运行的原因正是我提到的原因 - 因此定时功能对系统的影响很小。存在更高分辨率的定时功能,但是更加密集,需要许多CPU周期来测试和更新定时器。最高精度的定时器需要额外的物理硬件组件和硬件中断,有时需要关键任务程序的高优先级访问。
底线是Javascript计时功能不准确。它们平均会在目标时间的大约15毫秒内触发,有时更少,有时甚至更多。
答案 1 :(得分:0)
经过进一步的研究,我发现在Window 7之前,IE javascript计时器只调用了Windows系统计时器,每秒64个刻度 - 或15.6ms间隔。在Windows 7中,实际上有两个计时器设置。插入时适用的4ms定时器,以及拔下插头时适用的旧15.6ms定时器。这是一种省电措施,实际上可以通过高级电源配置设置界面进行配置 - 因此您可以将个人计算机切换为在所有情况下都有15.6毫秒或4毫秒,或者如果您想要歪曲 - 在具有高功耗时当你插上插头时,你已经拔掉电源了。