扫码关注官方订阅号
setInterval()有时候会有延迟,该如何解决?
认证0级讲师
用setTimeout代替setInterval
setInterval 和 setTimeout 都是异步执行, 也就是说要等所有同步执行的代码执行完毕才会开始...
所以如果其他同步执行的代码复杂, 需要大量计算时间, 那么定时器也会相对延迟执行...
这是没有办法的...
setTimeout(()=>{ console.log(1) }, 0) for (var i=0; i<=1000000000; i++) { }
执行上面代码, 你会明显感觉到
可以试试 web worker。在服务器端执行js
web worker
我之前在博客里讨论过这个,你可以看看 http://www.xiabingbao.com/javascript/2015/04/20/javascript-timer
setInterval和setTimeout的延迟根本是无法解决的问题,浏览器执行JS代码是单线程的,如果有费时代码,这两个方法的延迟就更不可接受了。另外还看应用场景啊,比如做声音同步,可以用播放的当前时间为基准来获取时间,这样同步就不会出错了。
先清除,再执行。
延遲是沒發根本緩解的,盡量使用settimeout代替setinterval
SetInterval(A,T)
改寫為
A(){
setTimeout(A,T)
}
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
用setTimeout代替setInterval
setInterval 和 setTimeout 都是异步执行, 也就是说要等所有同步执行的代码执行完毕才会开始...
所以如果其他同步执行的代码复杂, 需要大量计算时间, 那么定时器也会相对延迟执行...
这是没有办法的...
执行上面代码, 你会明显感觉到
可以试试
web worker。在服务器端执行js我之前在博客里讨论过这个,你可以看看 http://www.xiabingbao.com/javascript/2015/04/20/javascript-timer
setInterval和setTimeout的延迟根本是无法解决的问题,浏览器执行JS代码是单线程的,如果有费时代码,这两个方法的延迟就更不可接受了。另外还看应用场景啊,比如做声音同步,可以用播放的当前时间为基准来获取时间,这样同步就不会出错了。
先清除,再执行。
延遲是沒發根本緩解的,盡量使用settimeout代替setinterval
SetInterval(A,T)
改寫為
A(){
}