Javascript 在angular 2中使用web worker

Javascript 在angular 2中使用web worker,javascript,angular,typescript,angular-cli,web-worker,Javascript,Angular,Typescript,Angular Cli,Web Worker,我使用angular CLI创建了angular应用程序。我想使用webworker创建thread 我的想法是在后台线程中进行大量计算,并在完成后向主线程返回响应 我有worker.js self.addEventListener('message', (evt) => { switch (evt.data.cmd) { case 'CALCULATE':{ let payload = evt.data.payload; let response =

我使用
angular CLI
创建了angular应用程序。我想使用
webworker
创建
thread

我的想法是在后台
线程
中进行大量计算,并在完成后向主
线程
返回响应

我有
worker.js

self.addEventListener('message', (evt) => {
  switch (evt.data.cmd) {
    case 'CALCULATE':{
      let payload = evt.data.payload;
      let response = calculateFunction(payload);    
      let response = {
        cmd: 'RESPONSE',
        payload: response 
      }
      postMessage(response);
      break;
    }
    default:
      throw Error(`Invalid command: ${evt.data.cmd}`);
    }
});
在组件中:

private worker: Worker;
constructor() {
    this.initWebWorker();
}

initWebWorker(){
 let url = '/dist/assets/workers/worker.js';
 this.worker = new Worker(url);
 this.worker.addEventListener('message', (evt)=>{
  switch (evt.data.cmd) {
    case 'RESPONSE':{
      let payload = evt.data.payload;
      console.log(payload)
      break;
    }
    default:
      throw Error(`Invalid command: ${evt.data.cmd}`);
   }
  });
 }
从组件向
工人发布消息

this.worker.postMessage({cmd: 'CALCULATE', payload: payload});
这是预期的工作。但我还有几个问题要问

  • 我已将
    worker.js
    放在
    assets
    文件夹中,以便在
    ng build
  • worker.js
    js
    文件而不是
    TS
    。我希望我可以使用
    TS
  • 要使用
    TS
    我可以在
    webpack.config
    中添加
    条目
    ,它将为我生成
    。但我不想从
    angularcli
    project中
    弹出网页包配置
  • 我已经检查了这个包,但是我只能运行函数is thread,我希望在
    工作者文件中对所有与计算相关的函数进行代码分离
  • 那么,如何更好地使用
    angularcli项目中的
    webworker
    。我试图寻找相同的,但没有找到这方面的好文章


    参考资料:

    我也在寻找实现它的方法!