Javascript WebWorker可以在Chrome上工作,但不能在Firefox上工作

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

这是一个例子,在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(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});
};
这是一把小提琴: