这里的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)。
答案 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/