Javascript 离子2中的网页包和网络工作者
我们计划在ionic 2应用程序中使用web workers。然而,爱奥尼亚2在网页包中使用爱奥尼亚应用程序脚本(,我们使用的是1.0.0版)。我们需要一个webworker typescript文件,该文件被编译为JS,但不能作为main.JS和其他文件捆绑在一起 我们考虑的是文件名格式,例如 servicetest.worker.ts,其中“.worker”文件扩展名部分将被识别并从typescript编译为javascript,但不会与其他文件捆绑在一起Javascript 离子2中的网页包和网络工作者,javascript,typescript,webpack,ionic2,web-worker,Javascript,Typescript,Webpack,Ionic2,Web Worker,我们计划在ionic 2应用程序中使用web workers。然而,爱奥尼亚2在网页包中使用爱奥尼亚应用程序脚本(,我们使用的是1.0.0版)。我们需要一个webworker typescript文件,该文件被编译为JS,但不能作为main.JS和其他文件捆绑在一起 我们考虑的是文件名格式,例如 servicetest.worker.ts,其中“.worker”文件扩展名部分将被识别并从typescript编译为javascript,但不会与其他文件捆绑在一起 对此,我们非常感谢您提供的任何建议
对此,我们非常感谢您提供的任何建议,因为我们似乎必须自定义应用程序脚本。这是一个非常晚的答案,但可能对其他人有所帮助。 看看 我阅读了那篇文章,但不得不做一些调整,因为我必须根据需要调用worker方法,而不是在构造函数上 在
/src/assets
文件夹中,创建一个名为workers的新文件夹,您的worker。JS文件将位于其中。是的JS不是TS,据我所知,TypeScript文件不会编译成可用的webworker
创建一个webworker。我将粘贴fuzzySearch webworker的主代码(/assets/workers/fuzzySearch worker.js
):
在.ts文件中声明worker变量(通常位于构造函数上方):
在构造器上:
private readonly searchWorker: Worker = new Worker('./assets/workers/fuzzysearch-worker.js');
constructor(/* Other injected dependencies here */
public ngZone: NgZone) {
this.searchWorker.onmessage = (event) => {
// Inside ngZone for proper ChangeDetection
this.ngZone.run(()=> {
this.dataList = event.data.filteredList;
console.timeEnd('searchWorker');
})
};
}
最后,关于您的“操作函数”,让我们假设doSearch
:
doSearch(event) {
// ... extra code to do some magic
console.time('searchWorker');
this.searchWorker.postMessage({ command: 'doFuzzySearch', originalList: this.realList, pattern: searchFilter });
// ... extra code to do some other magic
}
this.searchWorker.postMessage
进行调用。所有重载操作都在webworker内部解决
希望能有帮助。
致以最良好的祝愿
doSearch(event) {
// ... extra code to do some magic
console.time('searchWorker');
this.searchWorker.postMessage({ command: 'doFuzzySearch', originalList: this.realList, pattern: searchFilter });
// ... extra code to do some other magic
}