假设我有一个名为
的数组{Cyclic:my.parent,string:"imAString",int:10,Position:{bunchofints}}
并且第一个数组具有2000个具有以下
的对象for (i in arr1){let arr1[i]= currentObject arr2.push(currentObject.Position)}
假设我想将Arr2定义为
var arrayBuffer = new ArrayBuffer("?what should go here");
var data = new DataView(arrayBuffer);
var tempArray = new Float32Array(data.byteLength/Float32Array.BYTES_PER_ELEMENT);
然后将arr2发送给Web worker。
这是目标,我想知道我将如何做,首先发送并访问第一个数组,然后执行另一个。这和ik有数组缓冲区可以定义,然后可以从缓冲区制作数据视图,但我不知道如何将我上面的内容发送给工人,因为我不知道需要什么发送缓冲区以及如何添加必要的限制,如字节长度。我看到一个帖子说那家伙用过像
这样的东西transform
这就是创造我想要的东西,如果没有,我怎样才能将我的物品转移给工人,谢谢你的爆炸。
Ps:我制作这个帖子的原因是为了简化已经存在的信息,我认为这些信息对新人来说有点普遍和不受欢迎。
答案 0 :(得分:0)
您可以使用JSON.stringify()
将JavaScript普通对象转换为字符串TextEncoder()
.encode()
方法,将字符串转换为Uint8Array
,传递Uint8Array
{{ 1}}属性到.buffer
的第二个参数,然后postMessage()
原始对象被定义为delete
或其他对象的属性。
在window
线程使用Worker
TextDecoder()
方法和.decode()
获取转移的对象。在JSON.parse()
事件中将对象定义为Worker
对象的属性。
执行将对象转换为字符串并转换为message
以获取TypedArray
ArrayBuffer
属性的相同任务,以将.buffer
普通对象的表示转移到ArrayBuffer
,Window
delete
的财产。
Worker
window
在this.data = {Cyclic:123,string:"imAString",int:10,Position:{a:1, b:2, c:3}};
const worker = new Worker("worker.js");
const encoder = new TextEncoder();
const decoder = new TextDecoder();
worker.onmessage = e => {
console.log(e.data)
}
console.log("original data in Window:", this.data);
this.encoded = encoder.encode(JSON.stringify(this.data));
worker.postMessage(this.encoded, [this.encoded.buffer]);
delete this.data;
delete this.encoded;
console.log("data deleted in Window:", this.data, this.encoded);
worker.onmessage = e => {
this.data = JSON.parse(decoder.decode(e.data));
console.log("data in message event at window:", this.data);
}
Worker