Почему метод React `renderToString` не использует кластеры? - PullRequest
0 голосов
/ 25 февраля 2019

Почему этот вопрос?

Я узнаю кое-что о выступлениях js и веб-рендеринге. Этот пост был очень полезен.

Если вы перейдете по некоторым ссылкам, вы попадете сюда и прочитаете это:

Код пользователя в узле.js запускается в одном потоке, поэтому для вычислительных операций (в отличие от ввода-вывода) вы можете выполнять их одновременно, но не параллельно.

Итак, я прочитал кое-что о параллелизме ипараллелизм в узле JS.Что я узнал, так это то, что nodeJS:

  • Параллельно для задач, связанных с вводом / выводом, поскольку он обрабатывается libuv
  • Параллельно для задач, связанных с процессором

Это объясняет, почему renderToString медленная операция, поскольку она связана с процессором.Но кажется, что есть способ включить параллелизм задач, связанных с ЦП, в nodejs: кластеризация .

Вопрос

Вот почему я здесь.Знаете ли вы, почему renderToString не кластеризован (не знаю, является ли это действительным английским)?

  • Может быть, это слишком сложно?
  • Может быть, просто не может бытьсделано параллельно?
  • Может быть, это не улучшает производительность по какой-то причине?

Я хотел бы понять, почему.Потому что после этих чтений я склонен думать, что nodeJS является очень производительным, когда дело доходит до работы с вводом / выводом, но, похоже, он также эффективен для задач, связанных с процессором, поскольку вы можете создавать кластеры.Тем не менее, это не кажется тривиальным и это выбор, который нужно рассмотреть в некоторых конкретных случаях.

Так что это приводит нас к одному дополнительному вопросу: каковы ограничения / недостатки кластеров nodejs?(Исключая тот факт, что он кажется сложным в настройке и обслуживании в больших проектах?)

1 Ответ

0 голосов
/ 26 февраля 2019

Не имеет смысла размещать абстракцию на этом уровне.

Нетрудно запустить renderToString() как кластер.Например, вы можете легко использовать библиотеку worker-farm .

Проблема в том, что это становится трудно использовать выгодным способом, потому что «хранилище» данных создается для каждого входящего запроса.должен находиться в области видимости всего дерева компонентов, с которым работает renderToString().

Возможно, хотя с экспериментальной библиотекой worker threads node.js, мы можем получить несколько многопоточных renderToString.Но работа над SSR (рендеринг на стороне сервера) в React далеко не так активна, как у клиента.

...