2013-06-04 120 views
1

我有一个数组,我需要从WebWorker传输回主线程。据我所知,只有ArrayBuffers和TypedArrays是可转移的,其他任何东西都被复制而不是传输。WebWorker - 传输包含对象的数组

问题我遇到的是数组包含对象,所以我不知道如何传输它们(这是由于巨大的尺寸需要的)。

例如,假设我有:

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

创建对象时,请考虑为数组的每个元素(对象?)发布内容。然后将它放在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

相关问题