PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

В каком порядке выполняются скрипты?

Продвинутые темы

Скрипты выполняются в порядке их расположения в HTML, но атрибуты `async` и `defer` меняют это: `defer` сохраняет порядок (после DOM), `async` — нет (по мере загрузки).

Обычные скрипты (без атрибутов)

Выполняются синхронно, в порядке появления в HTML, блокируя парсинг:

<script src="a.js"></script> <!-- 1-й -->
<script src="b.js"></script> <!-- 2-й, после a.js -->

defer

Загружаются параллельно, выполняются после построения DOM, в порядке объявления:

<script defer src="a.js"></script> <!-- выполнится 1-м -->
<script defer src="b.js"></script> <!-- 2-м -->

async

Загружаются параллельно, выполняются сразу по загрузке — порядок не гарантирован (какой раньше скачался):

<script async src="a.js"></script>
<script async src="b.js"></script>
<!-- порядок зависит от скорости загрузки -->

Итоговый порядок

  • Обычные — по порядку в HTML, блокируют парсинг.
  • defer — по порядку, после DOM.
  • async — по мере загрузки, без гарантии порядка.
  • Модули (type="module") — по умолчанию как defer.

Коротко для собеседования

Обычные скрипты выполняются по порядку в HTML, блокируя парсинг. defer — параллельная загрузка, выполнение после DOM с сохранением порядка. async — выполнение по мере загрузки, порядок не гарантирован. Модули по умолчанию ведут себя как defer.

Другие вопросы раздела