zoukankan      html  css  js  c++  java
  • vue2 + typescript 使用 worker

    1、安装插件

    npm install worker-loader --save-dev

    2、配置vue.config.js

    module.exports = {
      configureWebpack: {
        module: {
          rules: [
            {
              test: /.worker.(c|m)?js$/i,
              use: [
                {
                  loader: "worker-loader",
                },
                {
                  loader: "babel-loader",
                  options: {
                    presets: ["@babel/preset-env"],
                  },
                },
              ],
            },
          ],
        },
      }
    };

    3、将worker改造成构造函数,在src目录下新建一个worker-loader.d.ts文件内容如下

    declare module "worker-loader!*" {
      // You need to change `Worker`, if you specified a different value for the `workerType` option
      class WebpackWorker extends Worker {
        constructor();
      }
    
      // Uncomment this if you set the `esModule` option to `false`
      // export = WebpackWorker;
      export default WebpackWorker;
    }

    4、创建my.worker.ts 文件

    const ctx: Worker = self as any;
    // 监听 message 事件
    ctx.addEventListener('message', (res) => {
      console.log('很好收到消息了');
      // 向主线程发送消息
      if (res.data.type === 'ok') {
        ctx.postMessage('你错没?');
      } else {
        throw new Error('error');
      }
    }, false);
    
    //// ctx.onmessage = (e) => {
    // };
    
    // 监听错误事件
    ctx.addEventListener('error', (e) => {
      console.log('error');
    });
    
    //// ctx.onerror = (e) => {
    //   console.log(e);
    // };
    
    export default ctx;

    5、使用worker

    <template>
      <div class="about">
        <h2>Woker 使用</h2>
        <h2>title: {{ title }}</h2>
        <h2>title2: {{ title2 }}</h2>
      </div>
    </template>
    <script lang="ts">
    import Worker from 'worker-loader!./my.worker';
    import { Component, Vue } from 'vue-property-decorator';
    
    @Component
    export default class About extends Vue {
      public title: string = '';
      public title2: string = '';
      public mounted() {
        const worker = new Worker();
        console.log(worker);
    
        // 主进程向子进程发送信息:
        worker.postMessage({
          type: 'ok',
        });
    
        // 主进程接收子进程返回信息:
        worker.onmessage = (res) => {
          this.title = res.data;
          // 关掉进程
          worker.terminate();
        };
        worker.postMessage({
          type: 'no',
        });
        worker.onerror = () => {
          this.title2 = '我错了。';
          // 关掉进程
          worker.terminate();
        };
      }
    }
    </script>


     参考资料:https://webpack.js.org/loaders/worker-loader/

     

  • 相关阅读:
    swing_AbstractTableModel 创建表格
    swing_tableModel 创建表格
    LDA主题模型
    jieba分词
    LightGBM介绍及参数调优
    机器学习中常见的损失函数
    const和define区别 static
    C++四种类型转换
    行为模式->策略模式
    结构模式->享元模式
  • 原文地址:https://www.cnblogs.com/fczbk/p/14523983.html
Copyright © 2011-2022 走看看