Javascript JS间隔精确到1ms
我在JS中找到了一个创建自校正间隔的函数,因为不能相信Javascript JS间隔精确到1ms,javascript,Javascript,我在JS中找到了一个创建自校正间隔的函数,因为不能相信setInterval是准确的。当注销nextTick时,当间隔为1秒、1100秒或十分之一秒时,漂移修正器上部的nextTick按预期打印 下一个滴答声不是1000毫秒,通常是999,有时是998。按照前面提到的间隔,您会看到值,例如99、98表示百分之一秒,通常是9表示十分之一秒 现在,当涉及到毫秒时,即创建一个应该每毫秒调用一次的间隔,nextTick正在打印NaN或负数。我想这只是因为间隔太小了。我想知道是否有可能将精确度降低到1毫秒
setInterval
是准确的。当注销nextTick
时,当间隔为1秒、1100秒或十分之一秒时,漂移修正器上部的nextTick
按预期打印
下一个滴答声不是1000毫秒,通常是999,有时是998。按照前面提到的间隔,您会看到值,例如99、98表示百分之一秒,通常是9表示十分之一秒
现在,当涉及到毫秒时,即创建一个应该每毫秒调用一次的间隔,nextTick
正在打印NaN或负数。我想这只是因为间隔太小了。我想知道是否有可能将精确度降低到1毫秒
class Interval {
constructor(interval, onTick){
this.interval = interval;
this.onTick = onTick || function(){};
this.timer = false;
this.ticks = 0;
this.startTime = 0;
this.currentTime = 0;
this.elapsedTime = 0;
return this;
}
run(){
this.currentTime = Date.now();
if(!this.startTime){
this.startTime = this.currentTime;
}
this.onTick();
let nextTick = this.interval - (this.currentTime - (this.startTime + (this.ticks * this.interval)));
//console.log(nextTick);
this.ticks++;
let self = this;
this.timer = setTimeout(function(){
self.run();
}, nextTick);
return this;
}
start(){
this.run();
return this;
}
stop(){
clearTimeout(this.timer);
return this;
}
}
在fiddle中,您可以逐个取消对间隔构造函数的注释,以了解我的意思。不,JavaScript或任何非实时系统中不可能有如此高精度的计时器。需要这种准确性的事情(如音频计时)必须安排活动。此外,请检查此选项是否有用:如果您只需要一个不漂移的时钟,请查看是否需要1ms的间隔,如果没有实时操作系统,这几乎是不可能的。除了前面的注释中所述的内容,请使用performance.now()而不是Date.now()以获得高精度timers@jozenbasin对不起,我没有回答你的问题“我想知道是否有可能将准确度降低到1毫秒”,你从其他人那里得到了很多反馈。我已经撤回了我的反对票,并且将立即撤回我在文档中提到的反对票。不确定是否相关,但在极少数情况下
Date.now()-Date.now()
可以返回-1不,JavaScript或任何非实时系统中不可能有如此高精度的计时器。需要这种精度的东西(如音频计时)必须安排事件。此外,请查看此选项是否有用:如果您只需要一个不漂移的时钟,请查看是否需要1ms的间隔,如果没有实时操作系统,这几乎是不可能的。除了前面的注释中所述的内容外,请使用performance.now()而不是Date.now()高精度timers@jozenbasin很抱歉,我错过了你的问题“我想知道是否有可能将准确度降低到1毫秒”,你从其他人那里得到了很多反馈。我已经撤回了我的反对票,并且将立即撤回文档中提到的我的反对票。不确定是否相关,但在少数情况下Date.now()-Date.now()
可以返回-1