Critical Rendering Path: DOM, CSSOM, Layout, Paint, Composite
↑ 7.2 Рендеринг и производительность · → Следующая
Зачем это на собесе
Вопрос «что происходит после ввода URL / как браузер рисует страницу» проверяет фундамент производительности.
Шаги
- HTML → DOM: парсер строит дерево узлов.
- CSS → CSSOM: стили тоже превращаются в дерево.
- Render tree: DOM + CSSOM, без
display: noneиhead. - Layout: вычисление размеров и позиций.
- Paint: отрисовка пикселей по слоям.
- Composite: сборка слоёв на GPU в итоговое изображение.
Блокировки
| Ресурс | Что блокирует |
|---|---|
| CSS | рендер (render-blocking) и выполнение скриптов после него |
Синхронный <script> | парсинг HTML |
<script defer> | не блокирует парсинг, выполняется после разбора, по порядку |
<script async> | не блокирует парсинг, выполняется сразу как загрузится, без порядка |
type="module" | как defer по умолчанию |
Как ускорять
- критический CSS инлайнить, остальной грузить асинхронно;
- скрипты —
deferилиmodule; <link rel="preload">для критичных шрифтов и hero-изображения;preconnectк сторонним доменам,dns-prefetch;- минимизировать глубину цепочек запросов (CSS → шрифт → изображение).
<link rel="preconnect" href="https://cdn.example.com" crossorigin>
<link rel="preload" as="font" href="/fonts/inter.woff2" type="font/woff2" crossorigin>
<script type="module" src="/assets/app.js"></script>Вопросы с ответами
Почему CSS называют render-blocking?
Браузер не рисует страницу, пока не построит CSSOM, иначе показал бы «мигание» без стилей.
Разница между defer и async?
Оба не блокируют парсинг.
deferвыполняется по порядку после разбора документа,async— сразу после загрузки в произвольном порядке.