繁体   English   中英

WebWorker-传输包含对象的数组

[英]WebWorker - Transferring an array which contains objects

我有一个数组,需要将其从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,进行传输然后再转换回?

谢谢您的帮助!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM