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

Всегда ли загружаются скрипты синхронно?

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

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

По умолчанию — синхронно (блокирующе)

Обычный <script> блокирует парсинг HTML: браузер останавливается, загружает и выполняет скрипт, потом продолжает:

<script src="app.js"></script> <!-- блокирует парсинг -->

Асинхронная загрузка

async

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

<script async src="analytics.js"></script>

defer

Загружается параллельно, выполняется после DOM (порядок сохраняется):

<script defer src="app.js"></script>

Модули (type="module")

По умолчанию ведут себя как defer.

Динамическое добавление

Скрипты, созданные из JS, загружаются асинхронно:

const s = document.createElement('script');
s.src = 'lib.js';
document.head.appendChild(s); // асинхронно

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

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

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