Я пытаюсь использовать node-unfluff
, который извлекает содержимое из строк HTML. Однако для запуска обычно требуется ~ 200 мс. Поскольку он работает синхронно, это слишком медленно. Я хочу запустить его асинхронно.Веб-работники против child_process для функций интенсивного использования ЦП в Node.js
Насколько я знаю, мои варианты являются Веб-работниками (https://github.com/audreyt/node-webworker-threads) или child_process
(https://nodejs.org/api/child_process.html). Есть ли другие варианты?
Если нет, то какой из них лучше с точки зрения скорости или других факторов?
Edit:
Там также Темы à Gogo (https://github.com/xk/node-threads-a-gogo) и крошечным работник (https://github.com/avoidwork/tiny-worker).
Темы для WebWorker не поддерживают require
, так что это больше не вариант.
require
Файлы с помощью Threads à gogo с помощью своей функции load
, но это похоже на хакерское обходное решение.
На данный момент у крошечного работника только 26 звезд в Github, поэтому я не решаюсь использовать его в производственном коде. Он поддерживает require
.
Я рассматриваю возможность создания собственной реализации WebWorker с использованием child_process
, если нет лучших вариантов.
Можете ли вы объяснить ваш случай использования немного больше? Вы пытаетесь получить параллелизм при обработке нескольких URL-адресов или пытаетесь каким-то образом повысить производительность в узле-unluff? Как вы предполагали использовать дочерние процессы, когда вы зависите от библиотеки в узле? Почему стандартная кластеризация узлов не является опцией в вашем списке (имея в виду, что она действительно полагается на дочерние процессы)? – SylonZero
Я использую узел как сервер. Если для выполнения функции требуется 200 мс, ни один пользователь не может получить ответ сервера в 200 мс. Я хочу сделать его асинхронным, чтобы сервер не был заблокирован. Я могу использовать 'child_process' для запуска другого процесса узла. Я никогда раньше не использовал кластер Node, но я понимаю, что он создает сервер для каждого ядра. Если на каждом ядре запущен 'node-unfluff', то каждый сервер блокируется. –
Хорошо, ваш вопрос начинает становиться яснее. Однако, даже если экземпляр функции (с использованием node-unfluff) является синхронным, это не предотвращает запуск других экземпляров для других запросов к Node. Таким образом, одному пользователю может потребоваться 200 мс, но это обычно не означает, что запросы для * других * пользователей не могут быть запущены.Вы протестировали и обнаружили, что использование этого несвязанного модуля фактически блокирует одновременные запросы? – SylonZero