Назад к вопросам
Middle
76
questionbank
В чем заключается разница в работе режимов (async, defer или type) тега <script>?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
<script> без атрибутов
- HTML парсится до тега
<script>. - Парсинг HTML приостанавливается при обнаружении тега
<script>. - Происходит загрузка скрипта.
- Происходит выполнение скрипта.
- Парсинг HTML возобновляется после выполнения скрипта.
<script async>
- HTML парсится одновременно с загрузкой скрипта.
- Парсинг HTML приостанавливается при завершении загрузки скрипта.
- Происходит выполнение скрипта.
- Парсинг HTML возобновляется بعد выполнения скрипта.
- Порядок выполнения скриптов с
asyncне гарантируется, зависит от скорости их загрузки.
<script defer>
- HTML парсится одновременно с загрузкой скрипта.
- Скрипт выполняется после завершения парсинга HTML, но до события
DOMContentLoaded. - Порядок выполнения скриптов с
deferгарантируется, соответствует порядку их расположения в HTML. - Поведение аналогично
<script>помещенному перед закрывающим тегом</body>.
<script type="module"> (для ECMAScript Modules)
- Обрабатывается как
<script defer>по умолчанию (отложенное выполнение после парсинга, сохранение порядка). - Может использоваться с атрибутом
async. - Поддерживает импорт/экспорт модулей. Создает отдельную область видимости (scope).
| Атрибут | Загрузка скрипта | Выполнение скрипта | Блокировка парсинга HTML | Порядок выполнения |
|---|---|---|---|---|
| Нет | Блокирующая | Блокирующее | Да | Сохраняется |
async |
Не блокирующая (параллельная) | Не блокирующее (по завершении загрузки) | Нет | Не гарантируется |
defer |
Не блокирующая (параллельная) | Не блокирующее (после парсинга HTML) | Нет | Сохраняется |
type="module" |
Не блокирующая (параллельная) | Не блокирующее (после парсинга HTML, по умолчанию) | Нет | Сохраняется (по умолчанию) |
// Пример простого скрипта
console.log('Обычный скрипт');
// Пример асинхронного скрипта
console.log('Асинхронный скрипт');
// Пример отложенного скрипта
console.log('Отложенный скрипт');
// Пример модуля
import { someFunction } from './module.js';
someFunction();
console.log('Скрипт-модуль');