WebWorker 有时仅在 android 上加载
WebWorker is only loaded sometimes on android
在我们的 Ionic 应用程序中,我们有一个 web worker 来做一些计算。
以前还可以,现在突然出问题了。我们的应用程序发生了相当多的变化,但我删除了大部分代码以查明错误,但我并没有发现太多。
发生的事情是一切似乎都工作正常,但网络工作者中的代码从未执行过。也没有抛出错误。当我在 web worker 不工作时记录它,Chrome 记录 > Worker {}
,如果它工作,它记录 > Worker
。所以看起来网络工作者由于某种原因没有被初始化。
应用内代码:
const libWorker = new Worker('./assets/workers/lib.js')
console.log(libWorker) // Logs either "Worker {}" or "Worker"
libWorker.onmessage = event => {
console.log('WORKER CALLBACK')
}
libWorker.postMessage({ ... })
网络工作者中的代码:
console.log("worker started!")
问题是:
几乎每次这段代码运行时,worker started!
都不会被记录下来,似乎 web worker 没有被初始化,但没有错误。
这是我所知道的:
- 代码有时会在 Android 上运行(大约 5% 或更少),因此导入和用法是正确的。
- 我已经删除了 webworker 中的所有代码,除了
console.log("worker started!");
- 这很可能不是时间问题,我尝试将代码包装成多个
setTimeout
以确保一切就绪并有足够的时间加载。
- 相同的代码在 iOS 和浏览器 (Chrome) 上 100% 地完美运行。
- 两种情况都没有记录错误(我附加了一个事件侦听器来侦听错误)
真正难以调试的是,如果网络工作者未初始化,则永远不会有任何错误消息。只有当它被初始化(大约 5% 的次数)并且网络工作者代码包含语法错误时,它才会抛出错误。所以看起来 new Worker()
由于某种原因实际上大部分时间都没有被调用。
周末神奇地解决了这个问题。
我认为问题在于 Web Worker 代码以某种方式被缓存,因此没有反映我对应用所做的更改。
在我们的 Ionic 应用程序中,我们有一个 web worker 来做一些计算。
以前还可以,现在突然出问题了。我们的应用程序发生了相当多的变化,但我删除了大部分代码以查明错误,但我并没有发现太多。
发生的事情是一切似乎都工作正常,但网络工作者中的代码从未执行过。也没有抛出错误。当我在 web worker 不工作时记录它,Chrome 记录 > Worker {}
,如果它工作,它记录 > Worker
。所以看起来网络工作者由于某种原因没有被初始化。
应用内代码:
const libWorker = new Worker('./assets/workers/lib.js')
console.log(libWorker) // Logs either "Worker {}" or "Worker"
libWorker.onmessage = event => {
console.log('WORKER CALLBACK')
}
libWorker.postMessage({ ... })
网络工作者中的代码:
console.log("worker started!")
问题是:
几乎每次这段代码运行时,worker started!
都不会被记录下来,似乎 web worker 没有被初始化,但没有错误。
这是我所知道的:
- 代码有时会在 Android 上运行(大约 5% 或更少),因此导入和用法是正确的。
- 我已经删除了 webworker 中的所有代码,除了
console.log("worker started!");
- 这很可能不是时间问题,我尝试将代码包装成多个
setTimeout
以确保一切就绪并有足够的时间加载。 - 相同的代码在 iOS 和浏览器 (Chrome) 上 100% 地完美运行。
- 两种情况都没有记录错误(我附加了一个事件侦听器来侦听错误)
真正难以调试的是,如果网络工作者未初始化,则永远不会有任何错误消息。只有当它被初始化(大约 5% 的次数)并且网络工作者代码包含语法错误时,它才会抛出错误。所以看起来 new Worker()
由于某种原因实际上大部分时间都没有被调用。
周末神奇地解决了这个问题。
我认为问题在于 Web Worker 代码以某种方式被缓存,因此没有反映我对应用所做的更改。