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');
        }
    };
  • 相关阅读:
    Windows程序员的Linux快捷键
    Handeler的详细解释
    Asp.Net_Mvc_View
    使用脚本方式和使用控件方式来输出Html内容的区别
    当发布时报错: 找不到 obj\Debug\Package\PackageTmp\xxx.aspx 文件
    网路岗v1.2简单使用
    Html.Encode
    Android开发中的错误
    Asp.Net_Mvc_IgnoreRoute
    Linux目录结构
  • 原文地址:https://www.cnblogs.com/nanchen/p/9983307.html
Copyright © 2011-2022 走看看