心跳定时器setTimeout不准,webwork实现定时

236 阅读1分钟

当浏览器页面处于非活跃状态时,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()
}