Вопрос проверяет понимание механизмов блокировки рендеринга CSS и JavaScript при загрузке веб-страницы.
Браузер строит DOM (Document Object Model) из HTML и CSSOM (CSS Object Model) из CSS. Эти два дерева объединяются в Render Tree для отрисовки страницы. CSS и JavaScript по-разному влияют на этот процесс.
Когда парсер HTML встречает тег <link rel="stylesheet""> или <style>, он не останавливает парсинг HTML, но блокирует рендеринг. Браузер не будет отображать страницу до тех пор, пока CSSOM не будет полностью построен. Это необходимо, чтобы избежать FOUC (Flash of Unstyled Content).
Когда парсер встречает обычный тег <script> (без атрибутов async или defer), он полностью останавливает парсинг HTML. Браузер загружает скрипт (если он внешний), выполняет его, и только потом продолжает парсинг. Это связано с тем, что скрипт может изменить DOM (через document.write) или обратиться к CSSOM.
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="styles.css"> <!-- Render blocking -->
<script src="script.js"></script> <!-- Parser blocking -->
</head>
<body>
<p>Hello</p>
</body>
</html>В этом примере браузер сначала загрузит CSS, затем остановится на скрипте, загрузит и выполнит его, и только потом продолжит парсинг и отрисовку.
media атрибуты, чтобы указать, что стили не критичны для начального рендеринга.async (скрипт выполняется сразу после загрузки, не блокируя парсинг) или defer (скрипт выполняется после завершения парсинга HTML).Вывод: Понимание блокировки рендеринга и парсинга критически важно для оптимизации скорости загрузки страницы (Core Web Vitals). Используйте async/defer для скриптов и минимизируйте критический CSS для быстрого первого отображения.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию