这是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)。
发布于 2013-12-21 13:00:21
我刚刚经历过这种情况,我问过一个question这是一个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});
};这里有一个有效的工具:http://jsfiddle.net/HLpwV/3/
https://stackoverflow.com/questions/18952937
复制相似问题