Обходной путь веб-работника модуля

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

Поскольку логика для вычислений уже написана в модулях JavaScript и связана с веб-пакетом (точнее, они являются модулями машинописного текста как часть реагирующего приложения), наиболее естественным подходом является использование worker с типом module. Однако, как и в 2022 году, эта функция не поддерживается в старых браузерах, в частности, ее не поддерживает Fire Fox. Это мешает мне использовать эту функцию.

Единственное решение, которое я могу придумать только с классическим рабочим, — это скопировать все эти модули (и их зависимости) в один файл js, что будет кошмаром для удобства обслуживания. Есть ли способ обойти эту проблему (например, сгенерировать этот единственный файл js программно, не вмешиваясь в существующий код)? В частности, поскольку я использую webpack, я задумался над созданием отдельного бандла всего кода модуля для воркера. Но я недостаточно знаком с webpack, чтобы попробовать это.

Webpack поможет вам... Я предлагаю вам прочитать документацию для worker-loader (v4) или встроенная поддержка воркеров в v5, чтобы увидеть, к чему это приведет.

spender 22.03.2022 11:44

@spender Спасибо, я очень удивлен, что это работает. Я использую вебпак v5. Единственная незначительная жалоба, которую я имею, заключается в том, что это создает только предопределенного рабочего. Было бы лучше, если бы я мог создать встроенного рабочего процесса (с Blob), чтобы я мог связать с рабочим процессом некоторые динамические данные инициализации, неизвестные во время компиляции. С этим мне придется передавать эти динамические данные через postMessage.

lewisxy 22.03.2022 13:34

Возможно, стоит взглянуть на что-то вроде comlink или, поскольку вы контролируете свой собственный веб-пакет, он даже обернут как comlink-loader.

spender 22.03.2022 13:42

@spender Я только что посмотрел comlink. Это именно то, что мне нужно. Большое спасибо.

lewisxy 22.03.2022 15:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

WebPack версии 5 предлагает рабочая поддержка из коробки.

Относительно легко включить worker-loader, чтобы получить что-то подобное в Webpack версии 4.

Однако, если цель состоит в том, чтобы поговорить с веб-работником (т. е. передать параметры, получить результаты), то, возможно, стоит изучить comlink Google или даже интегрировать comlink-loader в конфигурацию вашего веб-пакета.

Comlink makes WebWorkers enjoyable. Comlink is a tiny library (1.1kB), that removes the mental barrier of thinking about postMessage and hides the fact that you are working with workers.

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