Как браузер рисует страницу
Зачем:Вы увидите путь от байтов ответа до пикселей и поймёте, откуда берутся «белый экран» и «прыгающая вёрстка». После урока вы можете назвать этапы: разбор, DOM, CSSOM, раскладка и отрисовка, и сказать, что их замедляет.
25 минут
Озвучено синтезом речи (Qwen3-TTS), голос не принадлежит человеку.
Рендеринг — путь страницы от байтов до пикселей: разбор HTML в DOM, CSS в CSSOM, дерево отрисовки, раскладка и отрисовка.
Ответ пришёл: что дальше
К этому моменту вы знаете, как браузер нашёл сервер, установил защищённое соединение и получил ответ: код 200 и тело, то есть байты HTML. Но байты ещё не страница. Браузеру предстоит превратить их в картинку на экране, и этот путь тоже разбит на этапы. Знать их полезно, потому что именно здесь рождаются «белый экран», при котором долго ничего нет, и «прыгающая вёрстка», когда текст уезжает из-под пальца.
Вся цепочка выглядит так:
- Байты в символы. По кодировке из заголовка
Content-Typeбайты читают как буквы. - Символы в DOM. Браузер находит теги и строит из них дерево элементов: DOM (Document Object Model). Он делает это по мере прихода данных, не дожидаясь конца файла.
- CSS в CSSOM. Встретив стили, браузер так же строит из правил дерево CSSOM.
- Дерево отрисовки. DOM и CSSOM соединяют в дерево того, что будет видно. Элементы со стилем
display: noneв него не попадают. - Раскладка. Для каждого элемента считают размеры и место на странице.
- Отрисовка. Пиксели закрашивают, иногда по слоям, и слои складывают на экран.
Поэкспериментируйте на схеме ниже: она использует настоящие разборщики вашего браузера. Измените HTML или CSS и посмотрите, как менялся результат на каждом этапе.
Браузер читает символы, находит теги и строит из них дерево элементов, DOM. Вот оно (текст тоже узлы):
Условные числа. Разбор HTML закончится через 100 мс. Стили будут готовы через 0 мс. Первая отрисовка: 150 мс.
Проверьте себя: что такое DOM и откуда он берётся?
Дерево элементов страницы в памяти браузера. Браузер строит его из HTML по мере разбора.
Что останавливает конвейер
Не все этапы одинаково спокойны. Два важных правила:
- CSS блокирует отрисовку. Пока браузер не получил стили, он ничего не рисует, чтобы не показать голый текст, а секундой позже резко перестроить его. Поэтому стили, нужные на первом экране, стараются делать маленькими и подключать в самом начале.
- Обычный скрипт блокирует разбор. Встретив
<script>, браузер останавливает построение DOM, скачивает скрипт, выполняет его и только потом идёт дальше: ведь скрипт может изменить страницу. Чтобы он не мешал, ему добавляют атрибутdefer(выполнить после разбора) илиasync(выполнить, как только скачается).
Белый экран часто возникает именно из-за этого: тяжёлый стиль или скрипт задерживает первую отрисовку. Нижняя часть схемы выше показывает порядок: переключайте тип скрипта и способ подключения стилей и смотрите, когда наступает первая отрисовка (числа условные, они показывают порядок, а не измерение).
Прыгающая вёрстка
Раскладку браузер считает по тому, что знает. Пока картинка не загрузилась, он не знает её размеров и не оставляет места. Когда она пришла, всё, что было ниже, сдвигается. То же с шрифтом, который подгрузился позже и оказался шире, и с рекламным блоком, вставленным сверху. Человек тянется к кнопке, а она уезжает.
Лекарство одно: сообщать размеры заранее. У картинок для этого есть атрибуты width и height, у рекламы и вставок резервируют место. В части про качество мы увидим, как это измеряется, и разберём показатели скорости, которые ввёл Google: они называются Core Web Vitals.
Проверьте себя: почему страница «прыгает» при загрузке картинок?
Пока картинка не пришла, браузер не знает её размера и не оставляет места. Когда она появляется, всё остальное сдвигается вниз.
Смотрим сами: вкладка «Сеть»
В инструментах разработчика (F12) есть вкладка «Сеть» (Network). Обновите страницу при открытой вкладке, и вы увидите:
- список запросов, которые сделала страница: сама страница, стили, скрипты, картинки, шрифты;
- у каждого код ответа, тип, размер и время;
- внизу: сколько запросов и сколько данных всего.
Так вы видите, что именно «весит» страницу. Отсортируйте по размеру, и самые тяжёлые ресурсы окажутся вверху. Для сравнения откройте первый в истории сайт: у него один запрос, одна страница в килобайт. Вспомните урок про пакеты: бюджет в 50 килобайт для модема.
Весь путь за минуту
Вы дошли до конца первой части. Вот весь путь страницы, который вы теперь можете проследить:
- Вы вводите адрес
https://www.example.ru/uslugi/. - DNS по имени
www.example.ruнаходит IP-адрес сервера. - TCP устанавливает соединение (рукопожатие из трёх шагов), нарезая данные на пакеты.
- TLS договаривается о ключе и проверяет сертификат: канал стал защищённым.
- HTTP: браузер отправляет запрос
GET /uslugi/, сервер отвечает кодом200и телом. - Браузер строит DOM и CSSOM, считает раскладку и рисует пиксели.
Каждый шаг можно сломать, и теперь вы знаете, где искать. Сайт не открывается вообще: DNS или соединение. Предупреждение о безопасности: сертификат. Ошибка 404 или 500: ответ HTTP. Белый экран или прыжки: этап отрисовки.
Практика
Вы в эпохе 1996 года и сравниваете её с сегодняшним днём. Откройте в новой вкладке первый в истории сайт и любой современный. Для каждого посмотрите вкладку «Сеть» и впишите в таблицу число запросов и самый тяжёлый ресурс. На втором сайте найдите, что мешает первой отрисовке: файл стилей в начале страницы, обычный скрипт, большая картинка.
Предпросмотр практики не покажет сеть: страница в нём не скачивается по сети, а подставляется целиком. Поэтому вам и нужно открыть настоящие сайты.
Что было не так с 1996 годом
Страницы тогда раскладывали вложенными таблицами, и браузер не мог показать таблицу, пока не просчитает все её ячейки: белый экран был обычным делом. Сегодня раскладкой занимается CSS, и браузер рисует страницу по частям. В следующей части вы начнёте писать сами: HTML, язык, на котором страница строится.
Практика
Готовлю вашу страницу…
Тест
Вопрос 1 из 6
Карточки
Эти карточки попадут в повторение, когда вы завершите урок.
Какие этапы проходит страница до экрана?
Ответ
Байты, DOM (дерево элементов), CSSOM (дерево стилей), дерево отрисовки, раскладка (размеры и положение), отрисовка (пиксели).
Что блокирует отрисовку и разбор?
Ответ
CSS блокирует отрисовку (чтобы не показать голый текст). Обычный скрипт блокирует разбор страницы, пока не выполнится. У скрипта с defer этого нет.
Что такое DOM?
Ответ
Дерево элементов страницы в памяти браузера. Его можно менять скриптом, и именно его показывают «Элементы» в инструментах разработчика.
Откуда берётся «прыгающая вёрстка»?
Ответ
Когда браузер не знает заранее размеров: картинки без width и height, поздно подгружённые шрифты, реклама. Всё остальное сдвигается.
Весь путь страницы одной строкой?
Ответ
Адрес, DNS, TCP, TLS, HTTP-запрос и ответ, DOM и CSSOM, раскладка, отрисовка.
Источники
- Populating the page: how browsers work (MDN) CC BY-SA, по-английски
- How browsers work (Тали Гарсиэль, web.dev) CC BY, по-английски
- Inside look at modern web browser, part 3 (Chrome for Developers) CC BY, по-английски
- Critical rendering path (web.dev) CC BY, по-английски
- Document Object Model, введение (MDN) CC BY-SA, по-английски
Видео
Как работает браузер (Zero to Hero, «Как устроен интернет», 7 из 13)
Видео загрузится с youtube-nocookie.com только после нажатия.
Дальше
Теперь вы знаете: как браузер рисует страницу: разбор, DOM, CSSOM, раскладка, отрисовка.