Я постараюсь подробно объяснить процесс рендеринга страницы.Пожалуйста, обратите внимание, что я не сосредотачиваюсь на процессе запрос-ответ, как задала ФП в вопросе.
Как только сервер предоставит ресурсы (HTML, CSS, JS, изображения и т. Д.) Дляв браузере он проходит следующий процесс:
Парсинг - HTML, CSS, JS
Рендеринг - Построение дерева DOM → Дерево рендеринга → Макет дерева рендеринга →Рисование дерева рендеринга
- Механизм рендеринга начинает получать содержимое запрошенного документа с сетевого уровня.Обычно это делается кусками по 8 КБ.
- Дерево DOM построено из неработающего ответа.
- Новые запросы отправляются на сервер для каждого нового ресурса, найденного в источнике HTML (обычно изображения, таблицы стилей и файлы JavaScript).
- На этом этапе браузер помечает документ как интерактивный и запускает синтаксический анализ сценариев в режиме «отложенного»: тех, которые должны быть выполнены после анализа документа.Состояние документа установлено на «завершено», и запускается событие «загрузка».
- Каждый файл CSS анализируется в объекте StyleSheet, где каждый объект содержит правила CSS с селекторами и объектами, соответствующими грамматике CSS.Построенное дерево называется CSSCOM.
- На вершине DOM и CSSOM создается дерево рендеринга, представляющее собой набор объектов для рендеринга.Каждый из объектов рендеринга содержит соответствующий ему объект DOM (или текстовый блок) плюс рассчитанные стили.Другими словами, дерево визуализации описывает визуальное представление DOM.
- После построения дерева рендеринга он проходит процесс «макета».Это означает предоставление каждому узлу точных координат, где он должен появиться на экране.
- Следующий этап - рисование - дерево рендеринга будет пройдено, и каждый узел будет окрашен с использованием бэкэнд-слоя пользовательского интерфейса.
- Перекрашивание: при изменении стилей элемента, которые не влияют на положение элемента на странице (например, цвет фона, цвет рамки, видимость), браузер просто перерисовывает элемент снова с новымпримененные стили (это означает, что происходит "перекраска" или "рестайлинг").
- Reflow: Когда изменения влияют на содержимое или структуру документа, или положение элемента, происходит перекомпоновка (или ретрансляция).
Какова внутренняя структура веб-браузера?
Чтобы понять процесс рендеринга страницы, описанный вышеТакже нам необходимо понять структуру веб-браузера.
Пользовательский интерфейс: Пользовательский интерфейс включает в себя адресную строку, кнопку «назад / вперед», меню закладок и т. д. Каждая частьотображение браузера кроме окна, где вы видите запрашиваемую страницу.
Движок браузера: Движок браузера выполняет действия между интерфейсом пользователя и движком рендеринга.
Механизм визуализации: Механизм визуализации отвечает за отображение запрошенного содержимого.Например, если запрошенным содержимым является HTML, механизм рендеринга анализирует HTML и CSS и отображает проанализированный контент на экране.
Сеть: Сеть обрабатывает сетевые вызовы, такие как HTTP-запросы, используя разные реализации для разных платформ за независимым от платформы интерфейсом.
Бэкэнд пользовательского интерфейса: Бэкэнд пользовательского интерфейса используется для рисования основных виджетов, таких как поля со списком и окна.Этот бэкэнд предоставляет общий интерфейс, который не зависит от платформы.Под ним используются методы пользовательского интерфейса операционной системы.
Механизм JavaScript: Механизм JavaScript используется для анализа и выполнения кода JavaScript.
Хранение данных: Хранение данных - это постоянный уровень.Браузеру может потребоваться локально сохранять все виды данных, например файлы cookie.Браузеры также поддерживают механизмы хранения, такие как localStorage, IndexedDB, WebSQL и FileSystem.
Примечание:
Во время процесса рендеринга графические вычислительные слои могут также использовать процессор общего назначения или графический процессор графического процессора.При использовании графического процессора для вычислений графического рендеринга графические программные слои разделяют задачу на несколько частей, поэтому он может использовать преимущества массивного параллелизма графического процессора для вычислений с плавающей запятой, необходимых для процесса рендеринга.1082 *
1. https://github.com/alex/what-happens-when
2. https://codeburst.io/how-browsers-work-6350a4234634