Skip to content
On this page

https://www.bilibili.com/video/BV1AU4y1i76g

主要原因是js进程和gui渲染引擎是互斥的,只能进行一个 所以可以利用webworker解决 大致就是postMessage发送数据,onmessage接收数据,然后处理

public目录下新建worker.js

javascript
//importScripts();                        /* 什么都不引入 */
//importScripts('foo.js');                /* 只引入 "foo.js" */
//importScripts('foo.js', 'bar.js');      /* 引入两个脚本 */

function handleData(num) {
  // 复杂的处理
  return str;
}

// self.onmessage 多个会覆盖,写多个没用
self.onmessage = async (e) => {
  const res = await handleData(e.data);
  self.postMessage({
    msg: "处理完了",
    data: res,
  }); 
};

使用Worker

css
const worker = new Worker("/worker.js"); // "worker.js"貌似也行

worker.postMessage(2000000); // 使用 postMessage 传输信息到目标文件

// 使用 onmessage 接受信息
worker.onmessage = (e) => {
  // 报错时马上终止指定worker进程
  worker.terminate();
  console.log("实例接收", e.data);
};

// 使用 onerror 进行目标文件,也就是指定worker线程发生错误时的回调
worker.onerror = function (e) {
  console.log("error at " + e.filename + ":" + e.lineno + e.message);
};

终止worker

外面:myWorker.terminate(); 里面:self.close();

粤ICP备2024285819号