DevGang
Авторизоваться

WebAssembly & Transferable, идеальное совпадение 

В большинстве случаев мы запускаем код WebAssembly и Web Worker (или worker_thread в Node.js), чтобы предотвратить блокировку основного потока и поддержку адаптивного пользовательского интерфейса.

Для связи с Web Worker мы используем Window.postMessage() для отправки данных из основного потока в поток воркера. Иногда вам может потребоваться отправить мегабайты данных (особенно для мультимедийных приложений), и это приведет к длительному времени передачи данных и даже к исключению из-за нехватки памяти из-за характера postMessage() - клонирования данных из основного потока в рабочий веб-поток:

Основной способ отправки данных веб-воркер
Основной способ отправки данных веб-воркер

Чтобы решить эту проблему, вы можете использовать Transferable в postMessage(), просто передать второй аргумент в postMessage(), и вы можете получить ускорение и экономию памяти без особых проблем.

// Без Transerable, для получения данных требуется до 2000 мс
const data = new UInt8Array(1024*1024*1024);
worker.postMessage(data);

// При использовании Transerable может получить до 100 мс
const data = new UInt8Array(1024*1024*1024);
worker.postMessage(data, [data.buffer]);

Проверьте демонстрацию в этом репозитории: https://github.com/jeromewu/web-worker-transferable-demo

Поскольку использование Transferable ускоряет передачу и экономит памяти, вы должны начать использовать его в своем приложении прямо сейчас.

Источник:

#JavaScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Напиши статью и выиграй годовую подписку на Яндекс плюс или лицензию от Jet Brains

Участвовать