vue项目浏览器性能造成页面假死,定时器不能准时执行或执行时间有问题,使用worker-loader开启多线程解决

//大版本vue:2    vue-cli:4    webpack:4    worker-loader:3


//安装worker-loader:npm install worker-loader --save-dev


//配置vue.config.js:
//****注意worker-loader需要在js-loader前配置
configureWebpack: {
    module: {
        rules: [
            {
                    test: /\.worker\.js$/,
                    loader: 'worker-loader'
            }
        ]
    }
},
chainWebpack(config) {
        config.module.rule('js').exclude.add(/\.worker\.js$/)
},
parallel: false


//创建file.worker.js文件:
/**
 * worker类
 * export定时器方法
 *
 */
class workerTimer {
    constructor() {}
    timeInterval(name, interval, _this) {
        this[name] = setInterval(() => {
            _this.postMessage({ name: name })
        }, Number(interval))
    }
}

/**
 *通过遍历器遍历参数
 *new出新的worker类
 *调用定时器方法
 */
self.addEventListener(
    'message',
    function (e) {
        e.data.map(item => {
            let workertimer = new workerTimer()
            workertimer.timeInterval(item.name, item.interval, self)
        })
    },
    false
)


//需要使用的.vue文件引入并使用:
import Worker from './file.worker.js'

data() {
    return {
        //可以开启多个多线程
        workerList: [
            { name: 'refreshExpirationTimes', interval: 3000 },
            { name: 'publishPermissionTipsTimes', interval: 3000 }
        ],
        worker: null
    }
},
methods: {
    async refreshExpirationTime() {
    },
    async publishPermissionTipsTime() {
    },
    workerInit() {
        this.worker = new Worker()
        this.worker.postMessage(this.workerList)
        this.worker.onmessage = params => {
            //判断是属于哪个多线程的使用
            if (params.data.name === 'refreshExpirationTimes') {
                this.refreshExpirationTime()
            } else if (params.data.name === 'publishPermissionTipsTimes') {
                this.publishPermissionTipsTime()
            }
        }
    }
},
mounted() {
   this.workerInit()
},
beforeDestroy() {
    //清除多线程
    this.worker.terminate()
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值