> Как управлять очередностью загрузки и выполнения скриптов в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Globaldrive

Стек: JavaScript

> Пример ответа

Управление очередностью загрузки и выполнения скриптов в JavaScript - ключевая задача для оптимизации производительности и предотвращения блокировки рендеринга. Основные подходы:

  1. Атрибуты тега <script>:

    • async - скрипт загружается асинхронно и выполняется сразу после загрузки, не дожидаясь других скриптов или DOM. Подходит для независимых скриптов (например, аналитика).
    • defer - скрипт загружается асинхронно, но выполняется только после полного разбора HTML, в порядке их появления в документе. Идеален для скриптов, зависящих от DOM.
    • Без атрибутов - скрипт блокирует парсинг HTML до полной загрузки и выполнения.
  2. Динамическая загрузка:

    • Создание элемента <script> через document.createElement('script') и добавление его в DOM. По умолчанию ведёт себя как async, но можно управлять через script.async = false для сохранения порядка.
  3. Модули ES6:

    • <script type="module"> по умолчанию ведёт себя как defer - загружаются параллельно, выполняются после парсинга, с соблюдением зависимостей через import.
  4. Продвинутые техники:

    • Использование document.write (не рекомендуется, устарело).
    • Загрузка через XMLHttpRequest или fetch с последующим выполнением через eval (опасно, избегать).
    • Библиотеки-загрузчики (например, RequireJS, SystemJS) для управления зависимостями.

Пример для контроля порядка:

HTML
<script defer src="lib.js"></script>
<script defer src="app.js"></script> <!-- app.js выполнится после lib.js -->

Или динамически:

JAVASCRIPT
function 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 для независимых скриптов, модули для современных проектов.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью