Требования к SSR

  • Серверный рендер не должен влиять на архитектуру фронтенд приложения, требуется сохранить привычные практики веб разработки.

  • Фронтенд приложение для серверного рендера исполняется на Node.js, но Node.js не поддерживает некоторые фичи и трюки, которые работают в браузере за счёт babel и webpack: новые экспериментальные фичи JavaScript, импорт любых файлов и др.

  • На Node.js недоступно АПИ браузера — history, localStorage, fetch, DOM и другие, нужны адаптеры или вариативность от режима запуска.

  • Рендер в браузере зациклен, реагирует на изменение состояния. На сервере всего одна итерация рендера, за одну итерацию приложение сможет только отправить асинхронные запросы к апи за данными и не дожидаясь ответа отрендерить "ожидание". Поэтому перед рендером необходимо инициализировать состояние приложения, соответствующее текущему запросу.

  • Сервер может обрабатывать несколько запросов от разных пользователей на разные страницы одновременно. Пока на один запрос ожидаются данные из апи, будет обрабатываться следующий запрос или завершаться предыдущий. Обработку требуется изолировать друг от друга.

  • Фронтенд приложение должно знать состояние, с которым рендерился html на сервере, иначе фронтенд перерендерит всё в соответствии с пустым начальным состоянием и повторно будет инициализировать его.

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

  • В html документ, генерируемый сервером, необходимо вставлять скрипты, стили и метатеги соответствующие текущей страницы.