Kozack
@Kozack
Thinking about a11y

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект