很抱歉,如果重复,但找不到我的确切情况。我正在玩Web Worker,非常有趣。我正在测试不同的情况并点击它。
主要:
var myWorker = new Worker("WK.js");
for (var i = 0; i <= 1000000000; i++) {
myWorker.postMessage(i);
}
myWorker.onmessage = function (e) {
alert(e.data);
}
工人:
var sum = 0;
self.onmessage = function (e) {
if (e.data == 1000000000) { postMessage("done" + sum); }
sum += e.data;
}
在工作者脚本上,我只是总结传递的值并在完成后回发总和。我遇到的问题是,上面的代码崩溃了我的浏览器(全部)这个数字(~1000000000)然而如果我将该循环移动到工作脚本,它工作正常。那么每个持续时间的postMessage调用数量是否有限制?请注意我知道这是错误的代码,只是为了测试。
答案 0 :(得分:0)
您的浏览器可能没有崩溃。问题是你有一个稍后的循环,如果浏览器在主ui中执行。所以基本上浏览器忙于破坏你的代码,并且无法找到任何用户输入,即。它很忙,通常这导致没有响应&#39;在Windows中的消息。你不能在工作中得到这样的雨只是因为代码在一个完全独立的线程(非ui)中执行。
答案 1 :(得分:0)
这可能是内存/垃圾回收问题。你发布了十亿条消息,每条消息至少是一个整数的大小,我认为在Javascript中存储的所有其他数字都是8字节。忽略每条消息的任何额外开销,这意味着它需要分配至少8GB的内存。
我必须承认对垃圾收集器的无知程度,但它可能无法在短时间内使用8gb内存分配数十亿个对象。
每个持续时间的postMessage调用次数是否有限
我怀疑是的,虽然也许不清楚你的“持续时间”是什么意思。