我使用Angular CLI
创建了角度应用。我想使用Web Worker
来创建thread
我的想法是在后台thread
中进行大量计算,并在完成后回复主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}`);
}
});
}
从组件
向Worker
发送消息
this.worker.postMessage({cmd: 'CALCULATE', payload: payload});
这是按预期工作的。但我有几个问题
worker.js
放入assets
文件夹,以便将其复制到ng build
worker.js
JS
文件不是TS
。我希望我可以使用TS
代替TS
我可以在entry
中添加webpack.config
,它会为我生成bundle
。但我不想eject webpack configuration
项目Angular CLI
worker file
中的计算相关的函数那么我怎样才能更好地使用Web worker
Angular CLI project
。我试图在此搜索相同但未找到的好文章。