Что такое атрибут defer у скрипта?
Продвинутые темы
Атрибут `defer` у тега `<script>` заставляет браузер загружать скрипт параллельно с парсингом HTML и выполнять его только после полного построения DOM, сохраняя порядок скриптов.
Поведение defer
- Скрипт скачивается параллельно с парсингом HTML (не блокирует его).
- Выполняется после построения DOM, перед событием
DOMContentLoaded. - Порядок сохраняется — скрипты выполняются в порядке их объявления в HTML.
- Работает только для внешних скриптов (
src).
<script defer src="app.js"></script>
<script defer src="utils.js"></script>
<!-- выполнятся после DOM, в порядке: app.js, затем utils.js -->defer против async
- defer — параллельная загрузка, выполнение после DOM, порядок сохраняется. Для зависимых скриптов и работы с DOM.
- async — параллельная загрузка, выполнение сразу по загрузке, порядок не гарантирован. Для независимых скриптов (аналитика).
defer против обычного скрипта
Обычный скрипт блокирует парсинг HTML, defer — нет.
Коротко для собеседования
defer грузит скрипт параллельно с парсингом и выполняет после построения DOM, сохраняя порядок. Идеален для скриптов, зависящих от DOM или друг от друга. В отличие от async, который выполняет сразу и без гарантии порядка.