Пост

Процесс отрисовки веб-страницы браузером

Рассмотрим процесс отображения веб-страницы браузером

Процесс отрисовки веб-страницы браузером

Для нас важно проследить каким образом формируется в браузере запрашиваемая html страница, после того как было установлено соединение с веб-сервером.

Сам по себе процесс рендера страницы сложен, поэтому вкратце рассмотрим этапы.

Начнем с запросов.

Запросы

Браузер от имени пользователя отправляет запрос на веб-сервер. Чаще всего запрашивается html файл index.html.

Когда запрос достиг сервера, сервер начинает отправлять ответ с заголовками и содержимым html файла.

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

После того как данные пришли их нужно обработать.

Обработка данных

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

Парсинг Html - это процесс, который позволяет компьютерам понимать и обрабатывать Html-код.

Он используется в различных приложениях, от отображения веб-страниц до извлечения данных и автоматизации задач.

Для того чтобы отрисовать данные браузер распознает переданные данные и преобразует их в DOM и CSSOM.

Об этом ниже.

DOM

DOM - это объектная модель документа, так как браузер работает не с текстом, а абстрактным представлением документа то есть DOM деревом.

То есть для документа строится дерево его элементов.

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

</body>
</html>

Для того чтобы манипулировать элементами, используются разные Javascript API.

Браузер начинает отрисовывать страницу с данными которые уже доступны.

Если документ сформирован правильно, парсер обработает данные быстро.

Во время парсинга, браузер запрашивает другие ресурсы, например изображения или css. В это же время обработка html продолжается.

Но если подключается тег script без параметров async или defer, такой скрипт блокирует обработку html, до завершения их загрузки.

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

Как можно было понять построение DOM дерева документа, это узкое место в производительности, поэтому в браузере есть специальный механизм предзагрузки.

Он находит скрипты с async или defer и загружает их параллельно с html.

В то же время когда ожидается получения css блокируется работа javascript, так как через javascript происходит выборка css селекторов.

CSSOM

По аналогии с DOM, как только браузер загрузил файл стилей, он строит CSSOM дерево (карту стилей), с которой он может работать.

Браузер проходит по правилам css и создает дерево основываясь на css селекторах.

Сам процесс построения CSSOM происходит очень быстро, это даже меньше чем DNS запрос.

Далее когда CSSOM обработан, должен быть исполнен javascript. Помимо этого браузер так же строит дерево доступности.

Рендер

Когда CSSOM и DOM готовы, пришло время процедуры рендера, а точнее построения render tree.

Рендер включает в себя несколько этапов

  • Стилизация
  • Компоновка
  • Композиция
  • Отрисовка

Стилизация

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

То есть идет проход по всему дереву с выявлением видимых узлов.

Так как каждый узел который нужно отобразить имеет свои правила в CSSOM, он содержит вычисленные стили.

Компоновка и отрисовка элементов

На этапе компоновки вычисляется размеры и положение элементов, и определяется какие узлы должны быть отрисованы, даже если они невидимы. Для того чтобы определить размеры элементов, происходит обход дерева.

За основу берется размер видимой области. Процесс вычисления начинается с элемента body и далее по дереву вниз.

При этом вычисление происходит в “потоке”.

Последний этап процесса отрисовка каждого узла, цвета, границы, тени. Все это браузер должен выполнять быстро.

Для отрисовки отдельных элементов браузер разбивает их на слои и выполнять их каждый по отдельности.

Трудозатратным процессом для браузера является глобальная перерисовка, например изменение размера окна браузера.

Порядок отрисовки элемента это задний фон, фоновое изображение, рамка, дочерние элементы, внешняя рамка.

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

Композиция

Когда элементы страницы нарисованы, браузер переходит к последнему этапу композиции.

Здесь происходит составление слоёв:

  • Браузер группирует элементы в слои, чтобы эффективно обработать их. Эти слои могут быть отрисованы независимо, что позволяет ускорить рендеринг.
  • Важные стили, такие как transform или opacity, могут использоваться для переноса элементов на GPU для дальнейшей обработки, чтобы разгрузить процессор.
  • На этом этапе браузер может оптимизировать рендеринг, отправив слои на видеокарту для отрисовки, но в разных браузерах - это по-разному реализовано.

Итог

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

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

Авторский пост защищен лицензией CC BY 4.0 .

Хотите оптимизировать свой бизнес, нужен сервис, сайт или интеграция.

Бесплатно расчитаю время разработки, предложу решение вашей задачи.