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

Часть A. Зачем нужно изоморфное веб-приложение?

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

Время загрузки страницы обычно измеряется в секундах и состоит из двух частей:

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

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

Часть Б. Что такое изоморфные приложения.

Прежде чем углубляться в то, что такое изоморфные приложения, нам нужно понять эволюцию веб-приложений. Мы рассмотрим приложение с визуализацией на стороне клиента (CSR) и приложение с визуализацией на стороне сервера (SSR).

Приложение с визуализацией на стороне клиента/одностраничное приложение:

  1. Одностраничное приложение — это приложение, которое работает внутри браузера и не требует перезагрузки страницы во время использования, а перезагружается только содержимое, отличающееся от текущей страницы. Мы используем эти типы приложений каждый день, например, Facebook или GitHub.
  2. Одностраничное приложение — это приложение на стороне клиента (отображаемое браузером), которое загружает весь веб-сайт после первоначальной загрузки. Это означает, что когда вы посещаете веб-сайт с помощью браузера, сервер отправляет HTML-шаблон и некоторый код JavaScript для вашего браузера, чтобы выполнить код, отображающий фактическое содержимое веб-страницы.
  3. Из-за тесной связи кода, создающего DOM, одностраничное приложение может выполнять сложные манипуляции с DOM.

https://secure-peak-90342.herokuapp.com/

https://github.com/elavarasi/newsfeedcsr

Плюсы:

  • Расширенное взаимодействие с сайтом
  • Быстрая отрисовка веб-сайта после первоначальной загрузки. SPA работает быстро, так как большинство ресурсов (HTML+CSS+Scripts) загружаются только один раз на протяжении всего жизненного цикла приложения. Туда и обратно передаются только данные.
  • Интерактивные веб-приложения с высокой скоростью отклика.
  • Надежный выбор библиотек JavaScript.

Минусы:

  • Низкое SEO, если оно реализовано неправильно.
  • Первоначальная загрузка может занять больше времени.
  • Требуется наличие и включение JavaScript.
  • Первоначальный запрос к серверу является разреженным, возвращая пустой HTML-файл с набором ссылок CSS и JavaScript (JS). Затем необходимо извлечь внешние файлы, чтобы отобразить соответствующую разметку. Это означает, что пользователю придется дольше ждать начального рендеринга, а сканеры могут интерпретировать вашу страницу как пустую.

Приложение с визуализацией на стороне сервера/многостраничное приложение:

  1. Многостраничные приложения или приложение, полностью отображаемое на стороне сервера, — это традиционный способ создания веб-приложений, в котором для каждого запроса на отображение данных или отправка данных обратно на сервер вызываются вызовы для рендеринга новой страницы с сервера в браузер.
  2. В SSR сервер отвечает клиентам полным HTML-кодом страницы, которую необходимо отобразить.

https://gentle-wildwood-71150.herokuapp.com/

https://github.com/elavarasi/newsfeedssr

Плюсы:

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

Минусы:

  • Частые запросы к серверу — узкое место из-за очень интерактивного сайта.
  • Пропускная способность вашего сервера значительно меньше пропускной способности CSR.
  • Несмотря на то, что страница отображается раньше и клиент может увидеть ее раньше, он не может взаимодействовать с ней до тех пор, пока не будет загружен JS.
  • Необогащенное взаимодействие с сайтом.
  • Сервер создает новую страницу при каждом взаимодействии с пользователем. Затем эта страница должна быть возвращена пользователю. Такое поведение может значительно увеличить время загрузки и привести к отсутствию отклика.

Изоморфное приложение/универсальное приложение:

Изоморфное приложение — лучшее из обоих миров. Гибридный подход нового и старого способов создания веб-приложений, где мы хотим обслуживать полностью сформированный HTML с сервера для начальной производительности загрузки страницы и SEO, в то же время мы нужна скорость и гибкость логики клиентского приложения.

Изоморфный код — это код, который может выполняться как на клиенте, так и на сервере. При первом открытии веб-сайта все операции выполняются на сервере, и браузер получает HTML-код со всей информацией (так же, как и на традиционных веб-сайтах со статическими страницами, которые могут индексировать поисковые системы). После загрузки JavaScript веб-приложение превращается в «одностраничное приложение» и работает соответственно. Это открывает всевозможные двери для оптимизации производительности, улучшения удобства обслуживания, поисковой оптимизации и большего количества веб-приложений с отслеживанием состояния.

Часть C: Создание изоморфных приложений с помощью React

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

Мы можем взять то же реагирующее приложение, создать его виртуальную версию и преобразовать в строку, которая представляет собой просто HTML, отправленную в браузер. Браузер быстро отрендерит его и создаст виртуальную версию на клиенте. Виртуальная версия на клиенте совпадает с HTML-кодом, который мы отправили с сервера, и реакция знает, что не нужно повторно отображать его, что дает нам гораздо более быстрое время до взаимодействия (TTI).

Какие модули и методы необходимы для создания изоморфного веб-приложения.

  • Экспресс-сервер для обработки нашего приложения React.
  • renderToString из react-dom/сервера
  • ReactDOM.hydrate из react-dom.
  • StaticRouter из react-router-dom
  • Redux для управления состоянием
  • React Helmet — SEO — Управляйте всеми вашими изменениями в заголовке документа
  • Вавилон
  • Веб-пакет

https://reactuniversalapp.herokuapp.com/

https://github.com/elavarasi/newsfeedUniversalApp