Есть ли способ передать массив объектов веб-работнику как переносимый объект? - PullRequest
0 голосов
/ 21 декабря 2018

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

Для простоты предположим, что я пытаюсь передать массивы:

var myArray1 = [{a: 0, b: "0"}, {a: 1, b: "0"}];

var myArray2 = [{c: 0, d:" 0 "}, {c: 1, d:" 0 "}];

Есть ли способпередать их как передаваемые объекты экземпляру веб-работника?

1 Ответ

0 голосов
/ 29 декабря 2018

Не напрямую, но ArrayBuffers и SharedArrayBuffers могут быть переданы веб-работникам, и если ваши данные будут такими же единообразными, как в вашем примере, то будет возможно сохранить эти данные в буфере массива, а не в массиве объектов.

Вместо

const arr = [{ a: 0, b: '0' }];

вы можете сохранить данные как

const ab = new ArrayBuffer(2 * 4);
const dv = new DataView(ab);
dv.setFloat32(0, 0);
dv.setUint32(4, '0'.charCodeAt(0));

, а затем прочитать их обратно, используя представление данных на рабочем месте.Это позволит вам передавать данные работнику, используя передаваемый элемент.Конечно, все зависит от ваших данных и их структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...