我有一个数组,我需要从WebWorker转移回主线程。据我所知,只有ArrayBuffers和TypedArrays可以转让,其他任何东西都被复制而不是转移。
我遇到的问题是数组包含对象,所以我不确定如何传输它们(由于体积庞大而需要它)。
例如假设我有:
function something() {
this.x = 1;
this.y = 2;
this.z = 3;
}
var array = [];
for (var x = 0; x < 6; x++) {
array[x] = new something();
}
有没有办法可以将数组转换为ArrayBuffer,转移然后将其转换回来?
感谢您的帮助!
答案 0 :(得分:0)
在创建对象时,考虑为数组的每个元素(对象?)发布。然后将它放在onmessage处理程序的数组中。
function something() {
this.x = 1;
this.y = 2;
this.z = 3;
}
var array = [];
for (var x = 0; x < 6; x++) {
postMessage(new something());
}
这适用于简单对象,例如样本中的对象,但您必须测试边界。
主页和工作人员之间传递的数据被复制,而不是共享。 对象在交给工人时被序列化,并且 随后,在另一端反序列化。页面和工作人员 不共享相同的实例,因此最终结果是重复是 在每一端创建。大多数浏览器都实现此功能 结构化克隆。