WebWorker - 传输包含对象的数组

时间:2013-06-04 19:09:30

标签: javascript arrays web-worker arraybuffer

我有一个数组,我需要从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,转移然后将其转换回来?

感谢您的帮助!

1 个答案:

答案 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());
}

这适用于简单对象,例如样本中的对象,但您必须测试边界。

  

主页和工作人员之间传递的数据被复制,而不是共享。   对象在交给工人时被序列化,并且   随后,在另一端反序列化。页面和工作人员   不共享相同的实例,因此最终结果是重复是   在每一端创建。大多数浏览器都实现此功能   结构化克隆。

MDN: Passing Data