Когда нельзя использовать defer

«Когда нельзя использовать defer» — вопрос из категории HTML, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

defer не стоит использовать, если:

  1. Нужен точный порядок выполнения скриптов – defer сохраняет порядок, но если скрипты зависят друг от друга динамически (например, загрузка через document.createElement('script')), порядок может нарушиться.

  2. Скрипт должен выполняться до рендеринга страницы – defer откладывает выполнение до полной загрузки DOM, но до события DOMContentLoaded. Если нужен ранний запуск (например, для критического функционала), лучше использовать async или встроенный скрипт.

  3. Скрипт зависит от других асинхронных ресурсов – если скрипт ждёт данные из другого async-скрипта или API, defer не гарантирует, что зависимый ресурс загрузится первым.

Пример:

<!-- Плохо: скрипт зависит от динамически загруженного кода -->
<script defer src="main.js"></script>
<script>
  // Этот код выполнится ДО main.js, хотя может зависеть от него
  console.log(window.someVarFromMain); // undefined
</script>