Отправка нескольких буферов массива веб-работнику Javascript?

Ответ Янни показывает, как отправить (передать право собственности) один буфер веб-воркеру: передаваемые объекты из Web Worker

Как мне отправить несколько буферов (в массиве) веб-воркеру (без копирования)?


person Agamemnus    schedule 18.11.2013    source источник


Ответы (2)


Worker#postMessage принимает массив передаваемых объектов,

var worker = new Worker("...");
var buffers = [new ArrayBuffer, new ArrayBuffer, new ArrayBuffer];
var message = {buffers: buffers};

worker.postMessage(message, buffers);

Вот пример скрипта, http://jsfiddle.net/g247v/.

person tantalor    schedule 27.02.2014
comment
Спасибо, но: (1): это не массив, это массив, обернутый в объект со свойством «буферы» (все, что задокументировано в MDN, это [arrayBuffer], а не {buffers: [arrayBuffer]}) — при условии это работает, это отличная находка. (2) скрипка не работает. Оповещения и console.log не определены в веб-воркерах. - person Agamemnus; 01.03.2014
comment
Ключ является вторым аргументом postMessage, который принимает массив передаваемых объектов, которые вы ищете. Здесь вы размещаете буферы, которые хотите передать. Первый аргумент — это просто произвольный объект сообщения. - person tantalor; 08.03.2014

На этот вопрос был дан ответ в другом месте, но сначала Google привел меня сюда, прежде чем я в конце концов нашел ответ здесь.

Вы можете передать несколько буферов веб-воркеру без выполнения копирования, используя Переносимые объекты:

Рабочий случай, первый аргумент — это данные, а второй — список элементов, которые должны быть переданы. Кстати, первый аргумент не обязательно должен быть ArrayBuffer. Например, это может быть объект JSON:

worker.postMessage(
  {data: int8View, moreData: anotherBuffer},
  [int8View.buffer, anotherBuffer]
);
person Corey Cole    schedule 16.04.2020