网络工作者似乎没有在生产中工作

时间:2018-06-18 02:15:51

标签: javascript web browser web-worker

我有一个应用程序,它使用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文件中可以看到的实际代码)

Heroku - 破碎: On heroku (broken) -- deployed

本地 - 工作: On local (working) --

1 个答案:

答案 0 :(得分:0)

我们一直在努力解决类似的问题,我们发现了以下问题……

我们还使用Webpack,重要的是使用了生产配置,使代码变得丑陋。在此过程中,我们发现onmessage函数变量被丢弃,因为没有在其他任何地方调用它。这就解释了为什么在生产构建工人实例中看不到任何代码。

我们还发现了另一个潜在的陷阱,那就是在丑化过程中,所有变量名都更改为单个字符。此过程还将使onmessage函数失效。

要解决此问题,而不是声明变量onmessage,而是将onmessage分配给全局对象(this

this.onmessage = (event) => {}

这样,丑陋化不会丢弃代码,函数名称也没有改变。

我知道这很晚了,但希望对您有所帮助。