Вопрос проверяет понимание асинхронной загрузки ресурсов для оптимизации производительности веб-страниц.
Когда браузер встречает тег <script> или <link rel="stylesheet"> в HTML, он по умолчанию останавливает парсинг документа до полной загрузки и выполнения ресурса. Это блокирует рендеринг страницы, увеличивая время до первого отображения контента (FCP). Особенно критично для JavaScript, так как скрипты могут изменять DOM.
Атрибуты async и defer позволяют загружать скрипты без блокировки парсинга:
<!-- Синхронная загрузка (блокирует) -->
<script src="script.js"></script>
<!-- Асинхронная загрузка -->
<script src="script.js" async></script>
<!-- Отложенная загрузка -->
<script src="script.js" defer></script>CSS по умолчанию блокирует рендеринг, так как браузер не может отобразить страницу без стилей. Основные подходы:
<head>, а остальные загружайте асинхронно через media="print" с последующим переключением.media="print" для печати).<link rel="preload" as="style"> для ранней загрузки, но это не отменяет блокировку.<!-- Критический CSS inline -->
<style>
body { font-family: sans-serif; }
.header { background: #333; }
</style>
<!-- Некритический CSS с асинхронной загрузкой -->
<link rel="stylesheet" href="non-critical.css" media="print" onload="this.media='all'">Применяйте async и defer для скриптов, не критичных для первого рендеринга, и используйте критический CSS с асинхронной загрузкой остальных стилей. Это значительно улучшает производительность и пользовательский опыт, особенно на мобильных устройствах.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию