Kozack
@Kozack
Thinking about a11y

Нормально ли постоянно создавать и убивать воркеры?

В моём SPA есть необходимость временами обрабатывать большие массивы. Я хочу создать функцию которая будет возвращать промис, отправлять данные в воркер, получать от него результат, и резолвить промис.

Таких функций для обработки массивов у меня несколько и они вызываются из разных мест приложения.

Суть вопроса: нормально ли, что я буду в этой же функции, при каждом вызове, регистрировать воркер, а по завершении — убивать его? Это как-то скажется на производительности? Или обязательно нужно создать глобальную переменную с воркером и обращаться к нему из разных мест приложения?
  • Вопрос задан
  • 254 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Все относительно.
С одной стороны, запуск нового воркера довольно затратная операция. Браузер поднимает реальный поток ОС, поднимает в нем новый контекст движка JS, настраивает примитивы синхронизации памяти (у JS то память разделена и общение через postMessage, а у браузера на C++ память вполне себе общая, да еще и с конкурентным доступом).
С другой, что такое ~100мс на старт воркера по сравнению с несколькими минутами решаемой им задачей?

По итогу:
Запускать по воркеру на каждую задачу будет работать медленнее, но реализовать проще.
Иметь пул заранее запущенных воркеров - гораздо быстрее, но придется реализовать этот самый пул, а так же очередь задач и распределение их по пулу.
Что больше подходит в Вашей ситуации можно сказать лишь точно зная Ваши тех.требования
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы