Javascript: Как использовать буфер массива с представлениями для отправки передаваемых объектов

Допустим, у меня есть массивы под названием

(Arr1,Arr2) 

и первый массив имеет 2000 объектов, которые имеют следующие

{Cyclic:my.parent,string:"imAString",int:10,Position:{bunchofints}}

скажем, я хотел определить Arr2 как

for (i in arr1){let arr1[i]= currentObject   arr2.push(currentObject.Position)}

затем для отправки arr2 веб-работнику.

это цель, и мне было интересно, как мне поступить, сначала отправить и получить доступ к первому массиву, а затем - другому. это и ik есть буферы массива, которые могут быть определены, тогда из буфера может быть сделано представление данных, но я понятия не имею, как бы вы отправили то, что у меня есть выше, работнику, учитывая, что я не знаю, что требуется для отправки буфер и как добавить необходимые ограничения, такие как длина байта. Я видел сообщение, что парень использовал что-то вроде

    var arrayBuffer = new ArrayBuffer("?what should go here");
    var data = new DataView(arrayBuffer);
    var tempArray = new Float32Array(data.byteLength/Float32Array.BYTES_PER_ELEMENT);  

это на линии создания того, что я хочу, и если нет, как я могу получить передачу моих объектов работнику, спасибо, что взорвали.

PS: причина, по которой я создал эту ветку, состоит в том, чтобы упростить уже существующую информацию, которая, на мой взгляд, была немного общей и неприветливой для новых людей

1 ответ

Ты можешь использовать JSON.stringify() преобразовать простой объект JavaScript в строку TextEncoder().encode() метод для преобразования строки в Uint8Array, проходить Uint8Array.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

const decoder = new TextDecoder();
const encoder = new TextEncoder();

self.onmessage = e => {
  console.log(e.data);
  self.data = JSON.parse(decoder.decode(e.data));
  self.data.string = "imAStringToo";
  self.encoded = encoder.encode(JSON.stringify(self.data));
  console.log("data in Worker:", self.data);
  self.postMessage(self.encoded, [self.encoded.buffer]);
  delete self.data; 
  delete self.encoded;
  console.log("data deleted in Worker:", self.data, self.encoded);
}

plnkr http://plnkr.co/edit/my7GS0XRC5iEwjL0I2th?p=preview

Другие вопросы по тегам