Javascript WebWorker可以在Chrome上工作,但不能在Firefox上工作
这是一个例子,在Chrome上显示100,在FireFox上显示0。两者都在最新的稳定版本上进行了测试 网络工作者代码:Javascript WebWorker可以在Chrome上工作,但不能在Firefox上工作,javascript,google-chrome,firefox,web-worker,typed-arrays,Javascript,Google Chrome,Firefox,Web Worker,Typed Arrays,这是一个例子,在Chrome上显示100,在FireFox上显示0。两者都在最新的稳定版本上进行了测试 网络工作者代码: self.onmessage = function(event) { postMessage({len: event.data.arr.length}); }; 以及主要代码: var worker = new Worker("worker.js"); worker.onmessage = function(event) { console.log(eve
self.onmessage = function(event) {
postMessage({len: event.data.arr.length});
};
以及主要代码:
var worker = new Worker("worker.js");
worker.onmessage = function(event) {
console.log(event.data);
};
var arr = new Uint8Array(100);
worker.postMessage({
arr: arr
}, [arr.buffer]);
两者都支持可转移数组。如果我删除[arr.buffer]
参数,它会很好地发送它,但随后我失去了性能增益,它将恢复为结构化克隆
如何在保持可转移行为的同时,使这两种浏览器都能工作
(顺便说一句,我实际上使用了多个阵列,它们的总容量约为10MB)。我刚刚讨论了这个问题,并询问了一个问题,这是一个bug还是出于设计 我提出了一个解决方法:即使数组的长度为零并且显然是空的,但它的缓冲区仍然存在,如果使用该缓冲区重新实例化数组,您可以访问数据:
// page:
worker.postMessage({
arr: arr
}, [arr.buffer]);
// worker:
self.onmessage = function(event) {
var arr = new Uint8Array(event.data.arr.buffer);
postMessage({len: event.data.arr.length, arrLen: arr.length});
};
这是一个有用的工具:我刚刚经历了这个问题,并问a这是一个bug还是出于设计 我提出了一个解决方法:即使数组的长度为零并且显然是空的,但它的缓冲区仍然存在,如果使用该缓冲区重新实例化数组,您可以访问数据:
// page:
worker.postMessage({
arr: arr
}, [arr.buffer]);
// worker:
self.onmessage = function(event) {
var arr = new Uint8Array(event.data.arr.buffer);
postMessage({len: event.data.arr.length, arrLen: arr.length});
};
这是一把小提琴: