【问题标题】:webworkers don't seem to be working in production网络工作者似乎没有在生产中工作
【发布时间】:2018-11-26 20:32:53
【问题描述】:

我有一个应用程序,它使用网络工作者来帮助与其他工作者进行一些计算。它抛出的错误本质上是抱怨它所期望的数据不存在,因为计算没有计算出来。

计算是在网络工作者运行的情况下在本地执行的,但在生产过程中,我几乎不知道为什么它不工作。

需要注意的一点是,因为我需要导入某些函数的上下文(在工作人员上下文之外定义),所以我遵循了这里建议的建议:(Creating a web worker inside React)并首先将其串入并转动先把它变成一个blob。

`

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

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

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

另外需要注意的是,我正在使用 react-create-app 来构建我的应用程序,我还没有弹出,所以 webpack 配置没有改变。

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

Heroku -- 损坏:

本地 - 工作:

【问题讨论】:

    标签: javascript web browser web-worker


    【解决方案1】:

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

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

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

    要修复它,而不是声明变量 onmessage,将 onmessage 分配给全局对象 (this)

    this.onmessage = (event) => {}

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

    我知道这已经晚了,但希望它有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 2013-11-25
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多