vuejs: 解决浏览器切换页面后setInterval计时器停止执行的问题

本文介绍了如何在JavaScript中使用WebWorker和Worker-loader解决页面切换时的定时器问题,通过Worker-loader将JavaScript转换为WebWorker,实现在后台持续执行任务,即使页面切换也不受影响。
摘要由CSDN通过智能技术生成

setInterval定时器是基于当前页面的,如果切换到其他页面,定时器会被暂停。这是浏览器的一种优化措施,以减少不必要的性能消耗。
如果需要在切换页面后继续执行定时器,可以使用Web Worker,它是在后台运行的程序,不受页面切换影响。在Web Worker中,可以使用定时器setInterval来执行某些操作。
Worker-Loader插件的主要作用是将我们的JavaScript文件转换为Web Worker线程。它可以将我们的JavaScript文件打包成一个独立的文件,该文件可以在Web Worker中运行。
1、安装:

npm install worker-loader -D

2、配置:在webpack.base.config.js文件中,

rules:[
    {
        test: /\.worker\.js$/,
        use: { loader: "worker-loader" },
    },
]

3、创建js文件:my.worker.js

var timer = null;
self.addEventListener('message', function (e) {
  if (e.data.type == 'start') {
    var interval = e.data.interval;
    timer = setInterval(function () {
      self.postMessage({ type: 'message' });
    }, interval);
  }
  if (e.data == 'stop') {
    clearInterval(timer);
    timer = null;
    self.postMessage({ type: 'stop' });
  }
}, false);

vue文件中引入并使用

import myWorker from "./my.worker.js";
const Worker = new myWorker();
Worker.postMessage({
	 type: "start",
 	interval: 1000
});
Worker.onmessage = (event)=> {
     // 收息消息
     if (event.data.type == 'message') {
   		// TODO: 收到消息后
	 }
    // 结束命令
	 if (event.data.type == 'stop') {
 		 // TODO: STOP
 	}
};
// 主线程关闭worker线程 
Worker.terminate();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值