zoukankan      html  css  js  c++  java
  • 嵌入式 Web workers

    前言

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

    解决方法

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

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

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

    demo

    // worker.js
    function 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');
        }
    };
  • 相关阅读:
    处理图片
    打死都不放手
    美白
    词云
    太阳花绘制
    测评软件Lemon教程
    --解释?说明:--
    T1 数字配对 题解
    P1100 高低位交换
    P1143 进制转换
  • 原文地址:https://www.cnblogs.com/nanchen/p/9983307.html
Copyright © 2011-2022 走看看