Понимание концепций, лежащих в основе рендеринга страниц и измерение производительности рендеринга с помощью Chrome DevTools
Неважно, насколько хорош ваш сайт; если загрузка занимает слишком много времени, никто не будет ждать, чтобы ее увидеть.
Если ваш сайт загружается более 3 секунд, велика вероятность, что вы потеряете почти половину посетителей.
Но знаете ли вы, что вы можете значительно сократить время загрузки страницы своего веб-приложения, используя прогрессивную визуализацию?
Прогрессивный рендеринг не только увеличил скорость загрузки страницы, но и решил некоторые серьезные проблемы в методах рендеринга на стороне клиента и на стороне сервера. Чтобы лучше понять прогрессивный рендеринг, давайте посмотрим, как работает рендеринг на стороне клиента и на стороне сервера.
Отрисовка на стороне клиента
Рендеринг на стороне клиента или CSR - это метод, при котором контент отображается в браузере с использованием JavaScript. Вместо того, чтобы получать все содержимое из самого файла HTML, сервер отправляет HTML с пустым body
и тегами сценария, включая пакеты JavaScript в head
, через которые браузер может отображать содержимое самостоятельно.
Теперь давайте посмотрим, как происходит рендеринг страницы на стороне клиента:
- Когда пользователь переходит на веб-страницу, запускается первоначальный запрос на получение HTML-документа.
- Сервер отправляет HTML-код с тегами сценария для загрузки пакета JS с пустым телом.
- Браузер анализирует HTML и отправляет HTTP-запросы для получения пакета JS. Пользователь видит только частичное содержимое оболочки HTML, либо пустую страницу, либо индикатор загрузки.
- Только после того, как основной пакет JS получен и визуализирован, пользователь видит реальный, значимый контент.
В CSR после загрузки исходного JS контент можно загружать асинхронно. Мы можем сначала загрузить критический контент, а потом некритический.
CSR может принести пользу пользователям, кэшируя первоначально загруженные пакеты JS и статический HTML-код в браузере, поэтому навигация между страницами становится очень быстрой.
Однако в CSR содержимое начинает загружаться только после завершения выполнения всего пакета JavaScript. А до тех пор пользователи должны сидеть сложа руки, просто глядя на пустой экран, не узнавая, что происходит.
По мере увеличения размера пакета пользователям придется ждать все больше и больше, прежде чем они увидят что-нибудь значимое или начнут использовать страницу.
Что, если мы сможем отображать контент в браузере вне зависимости от пакета JS? Здесь на помощь приходит рендеринг на стороне сервера!
Рендеринг на стороне сервера
При рендеринге на стороне сервера полный HTML-код отображается на сервере и отправляется клиенту. Контент, который нам нужно отобразить на экране, доступен сразу после анализа HTML; следовательно, первая отрисовка контента загружается быстрее, чем CSR.
Теперь давайте разберемся, как работает SSR:
- Браузер запрашивает HTML с сервера.
- Сервер делает запросы API и отображает HTML-контент на себе.
- Скомпилированный HTML-код затем отправляется в браузер.
- Как только браузер загружает и анализирует HTML, веб-приложение становится доступным для конечного пользователя, не дожидаясь загрузки пакетов JS.
- Затем браузер загружает и выполняет пакеты JS, чтобы сделать страницу интерактивной.
Поскольку API-интерфейсы обычно расположены на сервере, а исходный JavaScript не блокирует контент, в SSR исходный контент загружается очень быстро.
В SSR, хотя мы получаем быструю первую отрисовку содержимого, страница не будет интерактивной, пока мы не загрузим пакеты JS и не выполним их в браузере.
Мы действительно можем преодолеть недостатки CSR с помощью SSR. Но все же есть некоторые серьезные недостатки, такие как рендеринг как критического, так и некритического контента перед его отправкой клиенту.
Я знаю, о чем вы сейчас думаете 😃 Как здорово, если есть подход, в котором мы можем смешать оба упомянутых выше метода, верно? У меня есть хорошие новости для вас! Используя прогрессивный рендеринг, вы можете объединить преимущества как CSR, так и SSR.
Теперь давайте посмотрим, как мы можем повысить удобство работы ваших пользователей с помощью техники прогрессивного рендеринга.
Прогрессивный рендеринг на стороне сервера
«Прогрессивный рендеринг на стороне сервера - ключом к ускорению веб-страницы является метод последовательного рендеринга частей веб-страницы на стороне сервера и отправки их клиенту по частям, не дожидаясь, пока будет отрисована вся страница».
Прогрессивный рендеринг на стороне сервера (PSSR) основан на концепции HTML streaming
. PSSR разбивает страницы на значимые компоненты с помощью разделения кода. Эти части страницы управляются отдельным скриптом, и теперь у нас есть возможность гидратировать их независимо на основе некоторого приоритета, который мы определили ранее.
Давайте быстро посмотрим, как работает PSSR:
- Браузер запрашивает у сервера HTML-код.
- Сервер делает запросы API и сначала обрабатывает критический контент, а затем отправляет его клиенту.
- Браузер анализирует HTML и рисует его на экране.
- Сервер отображает некритический контент и передает его браузеру.
- Затем браузер анализирует и закрашивает некритичный контент.
- Тем временем пакеты JS загружаются и выполняются в фоновом режиме, а браузер передает интерактивность элементам DOM.
PSSR повышает производительность вашего веб-приложения за счет параллельной выборки и рендеринга компонентов страницы. Этот подход известен как метод прогрессивной гидратации.
Этот метод прогрессивной гидратации приводит к:
- Отложите гидратацию компонента до тех пор, пока он не появится в поле зрения или не понадобится для взаимодействия с пользователем.
- Загружать контент при взаимодействии с пользователем (прокрутка) - намного быстрее, чем CSR и SSR
- Тестирование показывает, что это может улучшить TTI.
- Лучшее взаимодействие с пользователем даже в медленных сетях.
В дополнение к этому вы можете использовать подход критического пути рендеринга с PSSR, чтобы еще больше оптимизировать производительность вашего приложения.
Критический путь рендеринга
Оптимизация критического пути рендеринга относится к приоритизации дисплеев контента, которые ссылаются на текущую активность пользователя. Браузер выполняет много негласной работы, чтобы обеспечить быстрое взаимодействие с пользователем в Интернете. Критический путь рендеринга - это непосредственные шаги между получением байтов HTML, CSS и JS и обработкой, необходимой для их преобразования в визуализированные пиксели.
Вы можете сократить время для первого рендеринга вашего веб-приложения, оптимизировав критический путь рендеринга.
Поскольку теперь у вас есть хорошее понимание клиентского, серверного и прогрессивного рендеринга, вы, должно быть, думаете, что есть способ оценить эти характеристики рендеринга. Ответ ДА !!
В Chrome DevTools есть отдельная вкладка для мониторинга и оценки производительности рендеринга, и давайте посмотрим, как мы можем ее использовать.
Создавайте лучшие библиотеки компонентов и системы проектирования
Делитесь компонентами между командами и проектами, чтобы ускорить разработку и убедиться, что ваши пользователи видят единообразный дизайн в каждой точке взаимодействия.
Инструменты OSS, такие как Bit, предлагают отличный опыт разработки для создания, совместного использования и внедрения компонентов в разных командах и приложениях. Создайте центр компонентов бесплатно попробуйте →
Анализ производительности с помощью Chrome DevTools
Даже в небольшом приложении за сценой выполняется много рендеринга. Вкладку «Рендеринг» в Chrome DevTools можно использовать для выявления проблем, связанных с рендерингом, в приложениях JavaScript.
Paint flashing
Инструмент Chrome DevTool
По мере того, как интерфейс становится более многофункциональным и сложным, жизненно важно рассмотреть способы оптимизации взаимодействия с пользователем за счет увеличения как времени загрузки, так и критического пути компонентов. Раскрашивание пикселей на экране - один из самых дорогостоящих процессов. Вы можете использовать Paint Flashing, удобный инструмент, доступный на вкладке Chrome DevTools Rendering
, чтобы визуализировать это.
На экране будут зеленые квадраты вокруг областей рендеринга, которые в данный момент включены в Chrome. Если вы видите места, которые не планировали раскрашивать, можете копнуть немного дальше.
Scrolling performance issues
в Chrome DevTools
Проблемы с производительностью прокрутки в DevTools - еще один удобный инструмент, который можно использовать для выявления любых проблем, связанных с производительностью прокрутки. Когда этот параметр выбран, отображается метка «Повторно окрашивается при прокрутке» и выделяется зеленым цветом при прокрутке то, что отображается при прокрутке.
Отслеживая подобные проблемы с производительностью, вы можете быть уверены, что ваше веб-приложение предоставляет пользователям наилучшие возможности.
Последние мысли
При разработке веб-приложения понимание основных концепций того, как работает отрисовка веб-приложения, поможет вам оптимизировать производительность веб-страницы.
Согласно статистике, задержка в одну секунду во время загрузки страницы снизит ваш коэффициент конверсии на 7%.
С другой стороны, длительная загрузка может иметь разрушительное влияние на коэффициент конверсии приложения.
В этой статье я упомянул три метода рендеринга и объяснил, почему прогрессивный рендеринг на стороне сервера имеет больше преимуществ по сравнению с двумя другими методами и как он помогает повысить производительность вашего веб-приложения.
Спасибо за чтение!! Не стесняйтесь сообщать мне свои мысли в разделе комментариев ниже 👇.