+
40
-

js中的计时器精确吗?

js中的计时器精确吗?


网友回复

+
21
-

JS中的计时器(setTimeout/setInterval)并不精确,主要有以下原因:

JS是单线程的,计时器需要等待主线程空闲才能执行:

// 示例:实际间隔可能大于1000ms
setInterval(() => {
console.log('执行时间可能不准');
// 如果这里有耗时操作,会影响下一次执行时间
}, 1000);

最小延迟限制:浏览器通常限制最小延迟为4ms左右:

// 即使设置0ms,实际也会有约4ms延迟
setTimeout(() => {
console.log('有最小延迟');
}, 0);

更精确的计时方案:

使用Date或performance.now()计算实际时间差:

const start = performance.now();
const interval = 1000; // 目标间隔1秒

function accurateTimer() {
  const drift = performance.now() - start - count * interval;
  count++;

  setTimeout(accurateTimer, interval - drift);
}

使用requestAnimationFrame实现高精度动画:

let lastTime = 0;

function animate(current...

点击查看剩余70%

我知道答案,我要回答