我有一个应用程序,它使用webworkers帮助与其他工作人员进行一些计算。它引发的错误主要是抱怨它所预期的数据不存在,因为计算没有计算出来。
计算是在网络工作者运行的情况下在本地执行的,但是在生产中,我几乎没有想到它为什么不能正常工作。
有一点需要注意的是,因为我需要导入的某些函数(在工作者上下文之外定义)的上下文,所以我遵循了这里建议的建议:(Creating a web worker inside React)并将其串起来首先将它变成一个blob。
`
false
以及我如何使用上面的代码是:
export const buildBlobUrlFromCode = (code) => {
// returns a DOMString that links context to the code within the blob
code = code.substring(code.indexOf("{") + 1, code.lastIndexOf("}"));
const blob = new Blob([code], { type: "application/javascript" });
return URL.createObjectURL(blob);
}
export class WebWorker {
constructor(worker) {
let code = worker.toString();
// const blobUrl = strDecoratedBuildBlobUrlFromCode(code);
const blobUrl = buildBlobUrlFromCode(code);
return new Worker(blobUrl);
}
}
其中const workerInstance = new WebWorker(MyWorker);
是导出的fn,定义了MyWorker
并且内部定义了所有操作。
我添加了一些日志,当我开始使用以下命令启动计算时基本上代码中断:onmessage
另外要注意的是,我使用react-create-app来构建我的应用程序而且我还没有被弹出,所以webpack配置没有受到影响。
此外 - 这些工作程序的源文件在部署时完全空白,但在本地填充(如我在worker.js文件中可以看到的实际代码)
答案 0 :(得分:0)
我们一直在努力解决类似的问题,我们发现了以下问题……
我们还使用Webpack,重要的是使用了生产配置,使代码变得丑陋。在此过程中,我们发现onmessage函数变量被丢弃,因为没有在其他任何地方调用它。这就解释了为什么在生产构建工人实例中看不到任何代码。
我们还发现了另一个潜在的陷阱,那就是在丑化过程中,所有变量名都更改为单个字符。此过程还将使onmessage函数失效。
要解决此问题,而不是声明变量onmessage,而是将onmessage分配给全局对象(this
)
this.onmessage = (event) => {}
这样,丑陋化不会丢弃代码,函数名称也没有改变。
我知道这很晚了,但希望对您有所帮助。