Sobes.tech
Middle
114
questionbank

Какая разница между <script>, <script async> и <script defer>?

Ответ от нейросети

sobes.tech AI

При использовании обычного тега <script> браузер прерывает парсинг HTML, загружает и выполняет скрипт, после чего продолжает парсить.

<script async> загружает скрипт параллельно с парсингом HTML. Выполнение скрипта происходит сразу после его загрузки и перед завершением парсинга. Порядок выполнения асинхронных скриптов не гарантирован.

<script defer> также загружает скрипт параллельно с парсингом HTML. Выполнение скрипта откладывается до полного завершения парсинга HTML. Скрипты с defer выполняются в порядке их следования в документе.

Атрибут Парсинг HTML Загрузка скрипта Выполнение скрипта Зависимость от порядка
<script> Приостанавливается Блокирует Блокирует Да
<script async> Продолжается Не блокирует Не блокирует Нет
<script defer> Продолжается Не блокирует Не блокирует Да

Пример:

<script src="script1.js"></script>
<script async src="script2.js"></script>
<script defer src="script3.js"></script>

<!--
  Обычный:<script src="script1.js"></script>
  Браузер парсит HTML до этого тега,
  приостанавливает парсинг, загружает script1.js,
  выполняет script1.js, потом продолжает парсинг.

  Асинхронный:<script async src="script2.js"></script>
  Браузер продолжает парсить HTML,
  загружает script2.js параллельно.
  Как только script2.js загружен, он может выполниться
  в любой момент, прерывая парсинг, перед тем как
  парсинг HTML завершится.

  Отложенный:<script defer src="script3.js"></script>
  Браузер продолжает парсить HTML,
  загружает script3.js параллельно.
  script3.js выполняется только после того как
  весь HTML полностью распарсен.
  Если есть несколько скриптов с defer, они выполнятся
  в том порядке, в котором они указаны в HTML.
-->