Вопрос проверяет понимание того, как браузер обрабатывает скрипты и почему неправильное подключение может замедлять загрузку страницы.
Обычный тег <script> блокирует парсинг HTML, пока файл не загрузится и не выполнится. Атрибут defer позволяет продолжить парсинг и выполнить скрипт после построения DOM. Атрибут async загружает и выполняет скрипт независимо от DOM. Выбор режима влияет на скорость загрузки и порядок выполнения.
Теги script напрямую влияют на то, как браузер строит DOM и выполняет JavaScript.
Когда браузер встречает:
<script src="app.js"></script>
Происходит:
Остановка парсинга HTML.
Загрузка файла.
Выполнение скрипта.
Продолжение парсинга.
Это называется parser blocking.
<script src="app.js" defer></script>
Особенности:
HTML продолжает парситься.
Скрипт выполняется после построения DOM.
Порядок выполнения сохраняется.
Используется для:
основного кода приложения
инициализации интерфейса
<script src="analytics.js" async></script>
Особенности:
Загружается параллельно.
Выполняется сразу после загрузки.
Порядок выполнения не гарантируется.
Используется для:
аналитики
сторонних виджетов
Неправильное подключение:
Увеличивает время до первой отрисовки.
Замедляет построение DOM.
Ухудшает Core Web Vitals.
Вывод: обычный script блокирует парсинг HTML, defer откладывает выполнение, async выполняется независимо и быстрее, но без гарантии порядка.