Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 网络工作者不';我好像不在生产部门工作_Javascript_Web_Browser_Web Worker - Fatal编程技术网

Javascript 网络工作者不';我好像不在生产部门工作

Javascript 网络工作者不';我好像不在生产部门工作,javascript,web,browser,web-worker,Javascript,Web,Browser,Web Worker,我有一个应用程序,它使用webworkers帮助其他工作人员进行一些计算。它抛出的错误本质上是抱怨它期望的数据不在那里,因为计算没有被计算 计算是在webworkers运行的情况下在本地执行的,但在prod中,我几乎不知道它为什么不工作 需要注意的一点是,因为我需要导入某些函数的上下文(在worker上下文之外定义),所以我遵循了这里建议的建议:(),首先将其串入,然后将其转换为blob ` 我如何使用上述代码是: constworkerinstance=新的网络工作者(MyWorker) 其中

我有一个应用程序,它使用webworkers帮助其他工作人员进行一些计算。它抛出的错误本质上是抱怨它期望的数据不在那里,因为计算没有被计算

计算是在webworkers运行的情况下在本地执行的,但在prod中,我几乎不知道它为什么不工作

需要注意的一点是,因为我需要导入某些函数的上下文(在worker上下文之外定义),所以我遵循了这里建议的建议:(),首先将其串入,然后将其转换为blob

`

我如何使用上述代码是:
constworkerinstance=新的网络工作者(MyWorker)

其中,
MyWorker
是定义了
onmessage
并在其中定义了所有操作的fn导出

我添加了一些日志,基本上是在开始计算时代码中断:
workerInstance.postMessage([data])

还需要注意的是,我正在使用react create应用程序构建我的应用程序,但我还没有弹出,因此网页配置未被触动

此外--这些worker的源文件在部署时是完全空白的,但在本地填充(如中所示,我可以在worker.js文件中看到实际的代码)

Heroku——破碎的:

本地--工作:

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

我们还使用了Webpack和一个重要的产品配置,使代码更加丑陋。在这个过程中,我们发现onmessage函数变量被丢弃,因为它没有在其他任何地方被调用。这解释了为什么在生产构建工作实例中没有可见的代码

我们还发现了另一个潜在的陷阱,即丑陋化过程将所有变量名更改为单个字符。这个过程也会使onmessage函数无用

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

this.onmessage=(事件)=>{}

这样,uglification不会丢弃代码,函数名也不会更改

我知道现在已经晚了,但希望能有所帮助

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);
    }
}