前端vue web-worker多线程基础使用

357 阅读1分钟

步骤一

vue2使用时需要安装worker-loader,npm i worker-loader,修改配置vue.config.js

chainWebpack: config => {
    // set worker-loader
    config.module
      .rule('worker')
      .test(/.worker.js$/)
      .use('worker-loader')
      .loader('worker-loader')
      .end();
  },

步骤二

vue文件引用worker

// index.vue
import Worker from './worker.js';
//如果没有vue.config.js的项目,引入worker文件时,直接把路径加在worker-loader后,`import Worker from 'worker-loader!./worker.js';`
data() {
    return {
        workerRef:{}
    }
}
mounted() {
      this.workerRef = new Worker();
      this.workerRef.postMessage(0);

      this.workerRef.onmessage = e => {
        console.log('接收到计算结果:', e.data);
      };
}

我配置了vue.config.js 没有生效,所以使用了另一种方式,直接加到路径中了 import Worker from 'worker-loader!./worker.js';

步骤三

新建worker.js 文件 worker.js

onmessage = function (e) {
  // onmessage获取传入的值
  //写一个简单的计算
  let res = e.data+1;
  // 将计算的结果传递出去
  postMessage(res);
};

vue3+vite使用

vue3+vite

vite编译时直接支持worker,因此只需要编译时保证正常编译即可

/// vite.config.js
worker: {
    rollupOptions: {
    output: {
        assetFileNames: 'assets/[name].[ext]'
        }
    }
},

vue文件引用时直接引用即可,其他与v2无异

// index.vue

onMounted(()=>{
  workerRef.value = new Worker(new URL('@/workers/worker.js', import.meta.url));
})