Назад к вопросам
Middle
413
questionbank
В чем разница между тегами <script>, <script async> и <script defer>?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Стандартный <script> останавливает парсинг HTML, загружает скрипт и исполняет его, затем парсинг продолжается.
<script async> загружает скрипт асинхронно, пока парсинг HTML продолжается. Скрипт исполняется сразу после загрузки. Порядок исполнения не гарантирован.
<script defer> загружает скрипт асинхронно, пока парсинг HTML продолжается. Скрипт исполняется только после завершения парсинга HTML, но до срабатывания события DOMContentLoaded. Порядок исполнения скриптов с defer сохраняется в соответствии с их появлением в HTML.
Сравнительная таблица:
| Атрибут | Парсинг HTML во время загрузки скрипта | Исполнение скрипта | Сохранение порядка исполнения |
|---|---|---|---|
| Нет | Пауза | Сразу после загрузки | Да |
async |
Продолжается | Сразу после загрузки (может прервать парсинг) | Нет |
defer |
Продолжается | После завершения парсинга HTML | Да |
Пример:`
<!-- Обычный скрипт - блокирует парсинг -->
<script src="script1.js"></script>
<!-- Асинхронный скрипт - не блокирует парсинг, исполнение сразу после загрузки -->
<script src="script2.js" async></script>
<!-- Отложенный скрипт - не блокирует парсинг, исполнение после парсинга HTML -->
<script src="script3.js" defer></script>
<script src="script4.js" defer></script> <!-- Исполнится после script3.js -->