Какие знаешь атрибуты загрузки скриптов в JavaScript?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Атрибуты загрузки скриптов в HTML
Атрибуты загрузки скриптов — это инструменты, которые контролируют, как и когда браузер загружает, анализирует и выполняет JavaScript файлы. Правильное использование этих атрибутов критично для производительности и пользовательского опыта.
1. async — Асинхронная загрузка и выполнение
Скрипт загружается параллельно с парсингом HTML, выполняется сразу после загрузки:
<script async src="analytics.js"></script>
<script async src="tracking.js"></script>
Характеристики:
- Загрузка не блокирует парсинг HTML
- Порядок выполнения НЕ гарантирован (если несколько async скриптов)
- Выполняется как только загрузился
- Идеален для независимых скриптов (аналитика, реклама, трекеры)
Визуально:
HTML парсинг: |----1----2----3----4----5|
↓ ↓
загрузка async: |--a(2)---b(4)--|
↓ ↓
выполнение: ----a-------b---
2. defer — Отложенное выполнение
Скрипт загружается параллельно, но выполняется после полного парсинга HTML:
<script defer src="main.js"></script>
<script defer src="utils.js"></script>
<script defer src="app.js"></script>
Характеристики:
- Загрузка не блокирует парсинг
- Порядок выполнения ГАРАНТИРОВАН (в порядке в документе)
- Выполняется после DOMContentLoaded
- Идеален для основной логики приложения
Визуально:
HTML парсинг: |----1----2----3----4----5|
↓ ↓ ↓
загрузка defer: |--a(2)---b(3)---c(4)--|
↓
выполнение: ------------------------------------a---b---c
3. Без атрибутов — Синхронная загрузка и выполнение
Браузер блокирует парсинг HTML до полной загрузки и выполнения скрипта:
<script src="critical.js"></script> <!-- блокирует всё -->
<p>Этот текст загружается только после выполнения скрипта</p>
Характеристики:
- Загрузка блокирует парсинг HTML
- Скрипт выполняется сразу после загрузки
- Медленнее других методов
- Используется редко, только для критически важных скриптов
4. module тип — ES6 модули
<script type="module" src="app.js"></script>
Характеристики:
- Работает как
defer(отложенное выполнение) - Позволяет использовать
import/export - Выполняется в строгом режиме
- Каждый модуль загружается только один раз
// app.js
import { init } from './utils.js';
import { render } from './components.js';
init();
render();
5. nomodule — Fallback для старых браузеров
<script type="module" src="app.js"></script>
<script nomodule src="legacy.js"></script>
Скрипт выполняется только в браузерах, не поддерживающих модули (IE 11).
6. crossorigin — Для скриптов с других доменов
<script
src="https://cdn.example.com/script.js"
crossorigin="anonymous"
></script>
Значения:
anonymous— без учётных данныхuse-credentials— с cookies и авторизацией
7. integrity — Проверка целостности (SRI)
<script
src="https://cdn.example.com/app.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykAXXcs..."
></script>
Обеспечивает, что скрипт не был изменён при передаче.
Сравнительная таблица
| Атрибут | Загрузка | Парсинг | Выполнение | Порядок | Случай использования |
|---|---|---|---|---|---|
| Нет | Блокирует | Блокирует | Сразу | 1-й | Критичные скрипты (редко) |
| async | Параллель | Продолжается | Сразу | Любой | Аналитика, реклама |
| defer | Параллель | Продолжается | После HTML | Гарантирован | Основная логика приложения |
| type="module" | Параллель | Продолжается | После HTML | Гарантирован | Современные приложения |
Практический пример оптимальной структуры
<html>
<head>
<!-- Стили загружаются быстро, не блокируют -->
<link rel="stylesheet" href="styles.css">
</head>
<body>
<!-- Основной контент -->
<div id="app"></div>
<!-- Критичные скрипты (редко) - синхронно -->
<!-- Обычно это не нужно -->
<!-- Основная логика - defer -->
<script defer src="bundle.js"></script>
<!-- Аналитика - async -->
<script async src="analytics.js"></script>
<!-- Реклама - async -->
<script async src="ads.js"></script>
</body>
</html>
Лучшие практики
- Используй
deferдля основных скриптов приложения - Используй
asyncдля независимых скриптов (аналитика, реклама) - Избегай синхронной загрузки для лучшей производительности
- Размещай
<script>в конце<body>или используйdefer/async - Для современных приложений используй
type="module"
Правильное управление загрузкой скриптов может значительно улучшить Time to Interactive (TTI) и общую производительность приложения.