0Pricing
CSS Academy · Урок

Компоновка, рисование и композиция: конвейер отрисовки

Изучите конвейер компоновки, рисования и композиции браузера, чтобы оценивать стоимость изменения стилей.

«Компоновка, рисование и композиция: конвейер отрисовки» — бесплатный урок CSS Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CSS Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CSS Academy содержит 4 уроков всего.

Три этапа отрисовки

После построения дерева отрисовки браузер выполняет три этапа: компоновку (расчёт размеров и положений элементов), отрисовку (заполнение пикселей цветами, текстом и изображениями) и композитинг (объединение отрисованных слоёв и вывод их на экран).

Компоновка (перекомпоновка)

Компоновка вычисляет геометрию — ширину, высоту и координаты x/y — каждого элемента. Изменение свойств, влияющих на геометрию (ширина, внешний отступ, внутренний отступ, размер шрифта, позиционирование), запускает компоновку элемента и, возможно, всего его поддерева — это самый затратный этап.

Отрисовка

Отрисовка заполняет пиксели каждого слоя: фоны, границы, текст, тени. Изменение цвета, цвета фона, видимости или радиуса скругления вызывает перерисовку без повторной компоновки — это дешевле компоновки, но всё ещё затратно, если перерисовывается большая область.

Композитинг

Композитор объединяет слои с помощью GPU. Свойства CSS, влияющие только на композитинг, — трансформация и непрозрачность — можно анимировать без запуска компоновки или отрисовки. GPU обрабатывает их со скоростью 60 кадров в секунду при минимальном участии CPU.

Справочник триггеров CSS

csstriggers.com (теперь документация на стороне браузера) описывает, какие свойства CSS запускают компоновку, отрисовку и/или композитинг в каждом движке браузера. Используйте его для проверки свойств анимации. Для анимации предпочтительны трансформация и непрозрачность.

Проблемы из-за частой перекомпоновки

Такие проблемы возникают, когда JavaScript в цикле чередует чтение свойств компоновки (offsetWidth) и запись свойств стилей. Каждая запись делает компоновку недействительной, а каждое чтение принудительно запускает синхронную перекомпоновку. Объединяйте все операции чтения перед всеми операциями записи, чтобы избежать лишних перекомпоновок.

  <pre class="snippet">// BAD: read-write-read-write loop
elements.forEach(el => { const w = el.offsetWidth; el.style.width = w + 10 + "px"; });
// GOOD: batch reads then writes</pre>

Свойства только для композитинга

Только transform и opacity полностью обрабатываются композитором, когда элемент находится на собственном слое. Анимация любого другого свойства — даже left/top — запускает компоновку или отрисовку в основном потоке и может вызвать рывки.

Создание слоёв GPU

Браузеры переводят элементы на собственный слой GPU, если у них указано will-change: transform, есть CSS-анимация transform/opacity, фиксированное позиционирование с соседними композитными элементами или 3D-трансформация. Каждый слой использует память GPU — слишком большое число слоёв создаёт нагрузку на память.

Предотвращение штормов перерисовки

Шторм перерисовки возникает, когда за каждый кадр заново отрисовывается большая часть страницы. Выполните профилирование в Chrome DevTools → Визуализация → Мигание при отрисовке, чтобы определить области перерисовки. Размещайте часто анимируемые элементы на собственных слоях, чтобы ограничить область перерисовки.

Панель производительности DevTools

Запишите профиль производительности в Chrome DevTools. На пламенной диаграмме отображаются события компоновки, обновления дерева слоёв, отрисовки и композитинга. Длинные полосы компоновки или отрисовки указывают на узкие места. Стремитесь к времени кадра менее 16 мс, чтобы поддерживать частоту 60 кадров/с.

Практические рекомендации по анимации

По возможности анимируйте свойства transform и opacity. Для анимаций появления используйте clip-path вместо width/height — в современных браузерах clip-path эффективно обрабатывается композитингом. Не анимируйте box-shadow: вместо этого используйте opacity и псевдоэлемент с заранее отрисованной тенью.

Проверка знаний

Какие два свойства CSS можно анимировать без запуска компоновки или отрисовки?

Итоги

Конвейер отрисовки — компоновка, отрисовка и композитинг — определяет производительность анимации. Компоновка требует больше всего ресурсов, отрисовка занимает промежуточное положение, а свойства, обрабатываемые только на этапе композитинга (transform, opacity), обрабатываются GPU. Понимание этих триггеров позволяет создавать плавные анимации с частотой 60 кадров/с без постоянного повторения компоновки и штормов перерисовки.

Часто задаваемые вопросы

Урок «Компоновка, рисование и композиция: конвейер отрисовки» бесплатный?

Да — полный текст урока «Компоновка, рисование и композиция: конвейер отрисовки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CSS Academy, подпишись на CoddyKit PRO. Курс CSS Academy содержит 4 уроков всего.

Чему я научусь в уроке «Компоновка, рисование и композиция: конвейер отрисовки»?

Изучите конвейер компоновки, рисования и композиции браузера, чтобы оценивать стоимость изменения стилей. Ты практикуешь CSS Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать CSS Academy?

Предыдущий опыт не требуется. CSS Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Компоновка, рисование и композиция: конвейер отрисовки»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке CSS Academy?

Да. Каждый урок CSS Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Критический CSS и блокировка отрисовки
  2. Компоновка, рисование и композиция: конвейер отрисовки
  3. will-change и продвижение на слои
  4. Покрытие CSS и неиспользуемые стили
← Назад к CSS Academy