#node.js #reactjs #express #ecmascript-6 #server-side-rendering
Вопрос:
из-за некоторых проблем, таких как наличие SSR, SSG и CSR рядом друг с другом, я решил создать свою собственную SSR для React js с помощью express js, я использую redux и saga, и у меня есть несколько вызовов API для генерации данных перед их отображением. поэтому мне пришлось использовать несколько обещаний в моем серверном рендерере, таких как ожидание, пока redux закончит все API, или ожидание стилей и сценариев, также я использую react-ssr-prepass, и он перемещается по всем моим компонентам (для отправки действий, которые требуются в SSR). так что в моем проекте много вещей, блокирующих потоки.
для обработки параллелизма я начал использовать узел-кластер, поэтому на моем сервере будет несколько узлов, и это увеличит возможности параллелизма, но это не лучшее решение, потому что при большой нагрузке даже кластеризация узлов не сможет отвечать на все запросы.
поэтому я начал думать о рабочем потоке или дочернем процессе в узле js, поэтому я создаю экземпляр своего средства визуализации на стороне сервера для каждого запроса и делаю все в фоновом режиме, чтобы параллельные запросы не ждали друг друга.
но проблема в дочернем процессе или рабочем потоке, я не могу использовать «импорт», так как это es6
поэтому у меня есть два вопроса
прежде всего, есть ли какой-либо способ использовать es6 в дочернем процессе? (Я пробовал плагин babel-esm, но он не поддерживает webpack 5)
во-вторых, есть ли какая-либо лучшая идея, чем использование рабочего потока дочернего процесса для увеличения возможностей параллелизма?
Ответ №1:
поэтому я нашел решение для своей первой задачи: вместо того, чтобы запускать свой рендерер непосредственно с дочерним процессом, мне пришлось сначала его создать, поэтому я использовал webpack, чтобы сделать вывод cjs, а затем использовать этот вывод в дочернем процессе.
и для еще большего повышения производительности я использовал комбинацию SSR и SSG, поэтому в каждом запросе я проверяю, существует ли файл, сопоставленный с маршрутом, на сервере, если это не так, я собираюсь использовать вывод средства визуализации SSR для создания файла и отправки ответа пользователю, затем для следующего запроса, поскольку кэшированный файл существует, я использую этот файл кэша вместо повторного отображения результата. наконец, я установил задание на сервере, чтобы очистить кэш каждые 10 минут