setInterval()有时候会有延迟,该如何解决?

setInterval()有时候会有延迟,该如何解决?

阅读 7.9k
6 个回答

用setTimeout代替setInterval

setInterval 和 setTimeout 都是异步执行, 也就是说要等所有同步执行的代码执行完毕才会开始...

所以如果其他同步执行的代码复杂, 需要大量计算时间, 那么定时器也会相对延迟执行...

这是没有办法的...

setTimeout(()=>{
   console.log(1)
}, 0)
for (var i=0; i<=1000000000; i++) {

}

执行上面代码, 你会明显感觉到

setInterval和setTimeout的延迟根本是无法解决的问题,浏览器执行JS代码是单线程的,如果有费时代码,这两个方法的延迟就更不可接受了。另外还看应用场景啊,比如做声音同步,可以用播放的当前时间为基准来获取时间,这样同步就不会出错了。

先清除,再执行。

延遲是沒發根本緩解的,盡量使用settimeout代替setinterval

SetInterval(A,T)

改寫為

A(){

  setTimeout(A,T)

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题