【发布时间】:2016-09-03 03:01:19
【问题描述】:
我在 chrome 上启动了一个 web worker,它有一个简单的函数,可以使用 setTimeout 重复调用。令人惊讶的是,在该函数被调用了大约 1000 次后,Web Worker 终止了。谁能解释为什么?我猜 chrome 正在做一些优化。
webworker.js
function hi() {
postMessage('1');
setTimeout(hi, 1);
}
hi();
main.js
var blob = new Blob([code]);
var blobURL = window.URL.createObjectURL(blob);
var worker = new Worker(blobURL);
worker.onmessage = function(data) {
console.log(data.data); // gets called around 1000 times and done
};
编辑: 在小提琴中转载: http://jsfiddle.net/meovfpv3/1/ onmessage 回调停止触发似乎需要任意长的时间,最快几秒,最长 +5 分钟
【问题讨论】:
-
当然我们可以解释原因,但不要让我们猜测。您必须展示一个可验证的最小示例,以便我们对其进行测试。
-
@IsmaelMiguel 我已经用 worker.js 代码更新了问题。基本上我用一个字符串做一个 blob 并把它交给工人
-
我遇到了同样的问题。我发现工人不会终止(用
console.log测试),onmessage 回调只是在某个时候停止被触发。非常奇怪且不可接受的浏览器行为! 桌子翻转 -
可能是消息队列已满或类似情况?
-
或者也许你的工人正在被垃圾收集,如果你不保留对他们的引用,这将会发生(我认为)。
标签: javascript google-chrome web worker