首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebWorker Transferable可以在Chrome上运行,但不能在火狐上运行

WebWorker Transferable可以在Chrome上运行,但不能在火狐上运行
EN

Stack Overflow用户
提问于 2013-09-23 14:25:20
回答 1查看 202关注 0票数 1

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

WebWorker代码:

代码语言:javascript
复制
self.onmessage = function(event) {
    postMessage({len: event.data.arr.length});
};

和主代码:

代码语言:javascript
复制
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)。

EN

回答 1

Stack Overflow用户

发布于 2013-12-21 13:00:21

我刚刚经历过这种情况,我问过一个question这是一个bug还是故意的。

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

代码语言:javascript
复制
// 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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18952937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档