博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
嵌入式 Web workers
阅读量:4660 次
发布时间:2019-06-09

本文共 1096 字,大约阅读时间需要 3 分钟。

前言

虽然worker可以将复杂的运算放入单独线程去运算,不阻塞UI线程,但是,由于worker()的构造函数的参数不能读取本地的文件,只能来自网络,所以当在一个项目里想使用本地的模块函数,是一个很麻烦的过程,官方的方法也没有提供方便的做法。

 

解决方法

将函数转换为blob,然后生成URL对象。

function fn2workerURL(fn) {  var blob = new Blob(['('+fn.toString()+')()'], {type: 'application/javascript'})  return URL.createObjectURL(blob)}

这样就可以直接在调用本地模块文件了。

 

demo

// worker.jsfunction scope() {  function timedCount(e) {    postMessage(e - 0 + 1);  }  onmessage = function (oEvent) {    console.error('worker error ', oEvent);    timedCount(oEvent.data);  };}function fn2workerURL(fn) {  var blob = new Blob(['(' + fn.toString() + ')()'], {type: 'application/javascript'});  return URL.createObjectURL(blob);}export default fn2workerURL(scope);
// main.js...import workerUrl from './worker.js';startWorker = () => {    if (typeof(Worker) !== 'undefined') {      if (!w) {        w = new Worker(workerUrl);      }      w.postMessage('1');      w.onmessage = function (event) {        console.error('worker message: ', event.data);      };    } else {      alert('dont support worker');    }};

 

转载于:https://www.cnblogs.com/nanchen/p/9983307.html

你可能感兴趣的文章