> Как управлять очередностью загрузки и выполнения скриптов в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Globaldrive
Стек: JavaScript
> Пример ответа
Управление очередностью загрузки и выполнения скриптов в JavaScript - ключевая задача для оптимизации производительности и предотвращения блокировки рендеринга. Основные подходы:
-
Атрибуты тега
<script>:async- скрипт загружается асинхронно и выполняется сразу после загрузки, не дожидаясь других скриптов или DOM. Подходит для независимых скриптов (например, аналитика).defer- скрипт загружается асинхронно, но выполняется только после полного разбора HTML, в порядке их появления в документе. Идеален для скриптов, зависящих от DOM.- Без атрибутов - скрипт блокирует парсинг HTML до полной загрузки и выполнения.
-
Динамическая загрузка:
- Создание элемента
<script>черезdocument.createElement('script')и добавление его в DOM. По умолчанию ведёт себя какasync, но можно управлять черезscript.async = falseдля сохранения порядка.
- Создание элемента
-
Модули ES6:
<script type="module">по умолчанию ведёт себя какdefer- загружаются параллельно, выполняются после парсинга, с соблюдением зависимостей черезimport.
-
Продвинутые техники:
- Использование
document.write(не рекомендуется, устарело). - Загрузка через
XMLHttpRequestилиfetchс последующим выполнением черезeval(опасно, избегать). - Библиотеки-загрузчики (например, RequireJS, SystemJS) для управления зависимостями.
- Использование
Пример для контроля порядка:
HTML<script defer src="lib.js"></script><script defer src="app.js"></script> <!-- app.js выполнится после lib.js -->
Или динамически:
JAVASCRIPTfunction loadScript(src, callback) {const script = document.createElement('script');script.src = src;script.onload = callback;document.head.appendChild(script);}loadScript('a.js', () => loadScript('b.js')); // последовательно
Выбор метода зависит от сценария: defer для порядка и DOM-зависимости, async для независимых скриптов, модули для современных проектов.
> Похожие задачи по frontend
Как создаются переменные в JavaScript?
В чем разница между async function и обычной функцией в JavaScript?
Как реализуется инкапсуляция в JavaScript
Как удалить дубликаты из массива чисел и строк без использования Set в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью