Компоновка, рисование и композиция: конвейер отрисовки
Изучите конвейер компоновки, рисования и композиции браузера, чтобы оценивать стоимость изменения стилей.
«Компоновка, рисование и композиция: конвейер отрисовки» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Критический CSS и блокировка отрисовки
- Компоновка, рисование и композиция: конвейер отрисовки
- will-change и продвижение на слои
- Покрытие CSS и неиспользуемые стили