[英]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());
}
这应该适用于简单的对象,例如示例中的对象,但是您必须测试边界。
主页和工作人员之间传递的数据将被复制,而不是共享。 对象在交给工作人员时会先序列化,然后在另一端反序列化。 页和工作器不共享同一实例,因此最终结果是在每个端均创建了一个副本。 大多数浏览器将此功能实现为结构化克隆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.