awesome-everything EN
↑ Обратно к восхождению

Браузер и фронтенд-рантайм

Render pipeline: шесть стадий от байтов до пикселей

Суть Что такое шесть стадий пайплайна, кто управляет кухней, и почему бюджет кадра в 16.67 мс решает всё.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на junior-высоте — поверхность
◷ 10 min

Вы нажали Enter на URL. Байты пошли. Где-то между первым пакетом и моментом, когда кнопка становится кликабельной на экране, браузер прогнал шестистадийный пайплайн — и большинство страниц тратят неправильное количество времени на неправильной стадии. Бюджет кадра — 16.67 мс при 60 fps.

Шесть стадий

Браузер превращает HTML + CSS + JS в пиксели ровно в шесть шагов, всегда в одном порядке:

СтадияЧто делает
Парсинг HTMLЧитает поток байтов и строит DOM-дерево
Построение CSSOMЧитает стилевые файлы и строит CSS Object Model
СтилиМатчит CSS-правила к DOM-узлам, разрешает каскад
КомпоновкаИзмеряет каждую коробку — позиции и размеры
ОтрисовкаЗаполняет пиксели в bitmap-слои
КомпозитингСобирает слои на GPU и отправляет кадр на экран

Работу делают два потока. Главный поток владеет парсингом HTML, построением CSSOM, пересчётом стилей, компоновкой и подготовкой отрисовки. Поток композитора собирает GPU-дружественные слои и отправляет их на GPU.

СтадияПотокМетка в DevTools
Парсинг HTMLГлавныйParse HTML
Построение CSSOMГлавныйParse Stylesheet
СтилиГлавныйRecalculate Style
КомпоновкаГлавныйLayout
ОтрисовкаГлавныйPaint
КомпозитингКомпозиторComposite Layers

Метафора кухни

Браузер — кухня ресторана. Парсинг HTML — это чтение чека заказа. CSSOM — чтение книги рецептов. Стили — сопоставление ингредиентов с блюдами. Компоновка — измерение тарелки и расстановка еды на ней. Отрисовка — собственно готовка, жар и цвет. Композитинг — официант, который забирает шесть тарелок сразу и несёт их к столу.

Если хоть одна станция тормозит, весь стол ждёт.

Бюджет кадра в 16.67 мс

Вы держите 60 кадров в секунду только если вся кухня успевает за 16.67 мс. Пропустили кадр — пользователь видит заикание: список при скролле дёргается, кнопка ощущается липкой, график отстаёт от мыши.

Лечение почти никогда не «ускорить JS» — а «не давать кухне переделывать компоновку, когда можно было просто переставить тарелки».

Почему это работает

Мониторы 120 Hz (iPhone Pro, флагманские Pixel) режут бюджет вдвое до 8.33 мс на кадр. Дисплеи с переменной частотой обновления (LTPO у Android) работают от 1 Hz до 120 Hz, бюджет меняется динамически. Если целиться в 60 fps — 90 Hz дисплеи будут в безопасности, но для 120 Hz нужны ещё более жёсткие бюджеты.

Кадр для чтения вслух. Антон · Браузер открывает карточку профиля. Дима · Origin-сервер комментирует кухню: «0.5 мс парсинг div аватарки, 0.4 мс сборка стилей, 0.2 мс мэтчинг селекторов, 3 мс измерение коробок — стоп, картинка не успела загрузиться, перемеряем, ещё 2 мс — 1.5 мс отрисовка, 0.5 мс композитинг. Кадр — 8.1 мс. Нормально. А что если пользователь скроллит и мы запускаем компоновку пятьдесят раз в секунду? Это 100 мс в секунду только на компоновку, шесть пропущенных кадров, скролл ощущается тяжёлым».

Расставь шаги по порядку

Браузер прогоняет эти шесть стадий в фиксированном порядке. Расставьте их в правильную последовательность.

  1. 1 Парсинг HTML → DOM-дерево
  2. 2 Построение CSSOM из стилевых файлов
  3. 3 Стили: мэтчинг селекторов, разрешение каскада
  4. 4 Компоновка: измерение позиций и размеров коробок
  5. 5 Отрисовка: заполнение пикселей в bitmap-слои
  6. 6 Композитинг: сборка слоёв на GPU
Викторина

Какой поток делает большую часть работы в пайплайне рендера?

Викторина

Страница держит 60 fps. Какой бюджет на кадр?

Закончи аналогию

Метафора браузера-как-кухни: парсинг HTML — чтение чека заказа; построение CSSOM — чтение книги рецептов; стили — сопоставление ингредиентов с блюдами; компоновка — измерение тарелки; отрисовка — готовка. Кто такой официант, который забирает шесть тарелок сразу и несёт их к столу?

Посчитай

Страница должна держать 60 кадров в секунду. Сколько миллисекунд у браузера на один кадр?

мс
Бюджет кадра при 60 fps
Весь кадр
16.67 мс
Оверхед браузера (rAF, ввод, GC)
~6 мс
Бюджет JS + компоновки + отрисовки
~10 мс
Composite-only путь
~0.5 мс / кадр
Вспомните перед уходом
  1. 01
    Назовите шесть стадий render pipeline по порядку.
  2. 02
    Какой поток владеет стадиями 1–5? Какой — стадией 6?
  3. 03
    Почему бюджет кадра при 60 fps — именно 16.67 мс?
Итог

Браузер рендерит страницу через шесть фиксированных стадий: парсинг HTML, построение CSSOM, стили, компоновка, отрисовка и композитинг. Главный поток владеет первыми пятью; поток композитора — шестой. При 60 fps полный бюджет кадра — 16.67 мс; после оверхеда браузера приложению остаётся примерно 10 мс. Метафора кухни объясняет, почему композитинг дёшев — официант переносит готовые тарелки без повторной готовки. Уроки 2–4 этого юнита разбирают, что каждая стадия стоит по-настоящему и как снизить эти расходы.

Связанные уроки
встречается в143
Продолжить восхождение ↑Цена стадий и модель процесса рендерера
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.