WebWorker Transferable在Chrome上运行,但不在Firefox上运行

时间:2013-09-23 06:25:20

标签: javascript google-chrome firefox web-worker typed-arrays

这里的a fiddle,在Chrome上显示100,在FireFox上显示0。两者都在最新的稳定版本上进行了测试。

WebWorker代码:

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)。

1 个答案:

答案 0 :(得分:1)

我刚刚完成了这项工作并询问question这是一个错误还是设计错误。

我想出了一个解决方法:即使数组长度为零并且显然为空,其缓冲区仍然存在,如果使用该缓冲区重新实例化数组,则可以访问数据:

// 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});
};

这是一个工作小提琴:http://jsfiddle.net/HLpwV/3/