当浏览器页面处于非活跃状态时,setTimeout、setInterval等定时器会被浏览器限制,导致延迟非常严重,10s定时越来越慢,变成20s、30s……
解决方案:使用webwork实现定时
// webwork里的代码
const WorkerCode = () => {
const _self = self
setInterval(() => {
_self.postMessage('heart')
}, 15000)
}
// 把脚本代码转为string
let code = WorkerCode.toString()
// 将代码块取出
code = code.substring(code.indexOf('{') + 1, code.lastIndexOf('}'))
const blob = new Blob([code], { type: 'application/javascript' })
const url = URL.createObjectURL(blob)
const worker = new Worker(url)
worker.onmessage = (e) => {
// 收到work消息,执行定时器
onHeart()
}