FCP (First Contentful Paint) измеряет момент, когда на экране появляется первый видимый контент. Одним из ключевых факторов, влияющих на FCP, являются рендер-блокирующие ресурсы, которые задерживают отображение контента на странице.
Рендер-блокирующие ресурсы — это файлы, которые браузер должен загрузить и обработать до того, как начнется визуализация страницы. К ним относятся:
<head> без атрибутов
media или disabled<script> без async или
deferfont-display: swap или без
него) могут блокировать рендер основного текстаБраузер останавливает построение DOM и CSSOM до завершения загрузки этих ресурсов. Это напрямую увеличивает время FCP, так как контент не может быть нарисован до их готовности.
При загрузке HTML браузер строит DOM. Когда встречается:
<link rel="stylesheet"> — браузер
приостанавливает построение DOM, загружает CSS, парсит его и строит
CSSOM. Только после этого можно объединить DOM и CSSOM
в Render Tree.<script> без async или
defer — выполнение JavaScript приостанавливает разбор HTML.
Если скрипт модифицирует DOM, браузер ждет его завершения, прежде чем
продолжить построение Render Tree.Результат: первый контент не появляется, пока все рендер-блокирующие ресурсы не готовы.
Ключевые подходы:
<head>.media="print" или loadCSS скриптами.<link rel="preload" as="style"> для
ускорения загрузки критического CSS.Снижение влияния JS на FCP включает:
async: скрипт загружается
параллельно с HTML и выполняется сразу после загрузки, не блокируя
разбор HTML.defer: скрипт загружается
параллельно и выполняется после построения DOM, минимально влияя на
FCP.Некоторые веб-шрифты могут задерживать FCP, особенно если используется стандартное поведение браузера, при котором текст скрыт до загрузки шрифта (FOIT — Flash of Invisible Text). Оптимизации:
<link rel="preload" as="font">.Для оценки влияния рендер-блокирующих ресурсов на FCP:
Библиотека Web Vitals позволяет измерять FCP и анализировать, как рендер-блокирующие ресурсы влияют на производительность:
import {getFCP} from 'web-vitals';
getFCP(metric => {
console.log('FCP:', metric.value, 'ms');
console.log('Зависит от блокирующих ресурсов:', metric.entries);
});
С помощью этих данных можно:
Даже оптимизированные ресурсы могут блокировать рендер при медленном соединении. Решения:
Первый контентный рендер зависит не только от объема HTML, но и от эффективного управления рендер-блокирующими ресурсами. Оптимизация CSS, JS и шрифтов напрямую ускоряет FCP, сокращает время до отображения контента и повышает ощущение скорости страницы пользователем.