плюсы и минусы реагируют на ssr с разделением кода и теперь React.Lazy - PullRequest
0 голосов
/ 30 октября 2018

Я немного озадачен достоинствами ssr и разделения кода, а также разделения кода, выполняемого исключительно на клиенте.

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

Я запутался, как расщепление кода вписывается в модель ssr. Является ли ssr отрисовкой первого попадания, а затем деление кода после этого выполняется на клиенте?

React.Lazy подчеркивает, что response.client выполняется на клиенте. Как это будет отличаться от разделения кода на сервере. Это если вы идете по определенному маршруту, то получаете этот кусок для первого рендера?

Я понимаю, что React.Lazy все делается на стороне клиента, и они действительно высказались. Как бы это отличалось, если бы это было сделано на сервере.

Есть ли реальная выгода для ssr с разделением кода. Разве это не просто добавляет сложности?

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Рендеринг на стороне сервера

  • Полезно для SEO вопросов

Когда запрашивается страница, сервер обрабатывает запрос и создает окончательную HTML-страницу, которая затем доставляется клиенту.

Этот подход благоприятствует SEO-страницам , поскольку конечный контент доступен в первом запросе, поэтому поисковые системы могут его проиндексировать.

Код расщепления

  • Полезно для страниц, на которых контент загружается в разное время

Если весь ваш веб-сайт использует слишком много ресурсов при разном времени загрузки , разделение кода является методом перехода к оптимизации производительности. Вместо того чтобы загружать все ресурсы при первом запросе, вы задерживаете загрузку до тех пор, пока ресурс не понадобится.

Реализация обоих вместе

Учитывая, что у вас есть веб-сайт с большим количеством ресурсов, и вы хотите отобразить всю запрошенную страницу перед обработкой ее клиенту, вы можете реализовать оба эти метода.

React.lazy ()

React.lazy () был реализован в React v16.6.0 как новый метод использования компонента Suspense для разделения кода.

Примечание

This feature is not yet available for server-side rendering.
Suspense support will be added in a later release.

Подводя итог

  • Suspense + React.lazy () пока не поддерживает рендеринг на стороне сервера.

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

0 голосов
/ 08 ноября 2018

ТЛ; др

В зависимости от вашего варианта использования вы можете использовать только SSR, только разделение кода или комбинировать оба при необходимости.

Заслуги ССР

  1. Лучше SEO , поскольку поисковые роботы имеют разметку для работы (и не обязательно зависят от выполнения javascript) для индексации.

  2. Ускоренный начальный рендеринг , поскольку разметка отправляется с сервера, браузер не должен ждать выполнения javascript для его рендеринга. (Хотя разметке по-прежнему будет не хватать интерактивности, пока реакция не станет гидратированной на стороне клиента).

  3. Сначала доставить критический CSS . Критический CSS для начального рендеринга страницы может быть встроенным, лучше UX, так как загруженная разметка уже будет иметь готовые стили.

  4. Упрощенное разбиение маршрута . SSR imo упрощает рассуждение о разделении маршрута вашего приложения. Например, у вас могут быть разные страницы для /about и /home, которые можно использовать для разделения маршрута, чтобы уменьшить размер пакета (и при необходимости предварительно загрузить другие маршруты на стороне клиента).

Объединение кода, разделяющего ваши компоненты и SSR

Возможно, нет необходимости выполнять серверную визуализацию всей вашей страницы. Например, предположим, что ваша домашняя страница (которую вы хотите отобразить на сервере) содержит компонент Chat, чтобы пользователи могли напрямую задавать вам вопросы.

Если этот компонент большой, вы можете отказаться от его рендеринга на сервере, чтобы пользователь мог сначала получить самые важные фрагменты страницы. Это уменьшит вашу начальную загрузку страницы за счет разделения кода этого компонента на компоненте домашней страницы.

Когда браузер проанализировал разметку, он загрузит ваш компонент Chat после основного пакета. Таким образом, вы можете идентифицировать и контролировать размеры ваших пачек.

Только с использованием разделения кода

Это идеальный способ для создания приложения, если вы не заинтересованы в преимуществах SSR.

Например, если ваше приложение является пользовательской панелью для аутентифицированных пользователей, может быть лучше вообще не беспокоиться о SSR, а просто разделить код вашего приложения. Также обратите внимание, что на сервер, выполняющий рендеринг вашего приложения, потребуется больше времени для отправки ответа на сервер (вместо простых REST API), поскольку разметка должна быть создана.

Приходите на ваши вопросы:

Я запутался, как расщепление кода вписывается в модель ssr. Является ли ssr отрисовкой первого попадания, а затем деление кода после этого выполняется на клиенте?

Да, вроде. Браузер получает начальную загрузку с сервера, после чего клиент заботится о загрузке необходимых битов. Теперь вы можете решить предварительно загрузить серверную часть компонентов и также отправить все (пожалуйста, отметьте react-loadable, о котором я упоминаю в конце этого ответа).

Как бы это отличалось от разделения кода на сервере. Это если вы идете по определенному маршруту, то извлекаете этот кусок для первого рендера?

lazy - это просто более чистый API с поддержкой Suspense для разделения кода. В идеале, когда вы загружаете маршрут в первый раз, сервер отрисовывает начальную разметку, а затем позволяет клиенту позаботиться о загрузке следующих битов и маршрутизации. Imo Next.js делает это очень хорошо.

Как бы это отличалось, если бы это было сделано на сервере.

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

Есть ли реальная выгода для ssr с разделением кода. Разве это не просто добавляет сложности?

У всего здесь есть свой компромисс, imo. Как я уже упоминал в разделе Only, использующем разделение кода , прекрасно использовать разделение кода, если ваш вариант использования не требует преимуществ SSR.

Примечание

В настоящее время lazy (в React v16.6.1) не полностью поддерживает SSR. Возможно, вы захотите проверить react-loadable для обработки случаев, когда вы хотите предварительно загрузить компоненты на стороне сервера.

0 голосов
/ 31 октября 2018

Вы задаете много вопросов здесь. На мой взгляд, разделение кода полезно для больших приложений, где ваш встроенный пакет слишком велик для одной загрузки. Хотя рендеринг на стороне сервера полезен для меньших стилей целевых страниц, что сокращает время вычислений в браузере.

...