Выбор ответа Junior Производительность и Web Vitals спрашивают часто обновлено

async и defer у скриптов

Вопрос

Есть два скрипта: a.js зависит от lib.js. Как подключить их, чтобы не блокировать разбор HTML и сохранить порядок выполнения?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Обоим поставить defer в нужном порядке. defer-скрипты качаются параллельно и выполняются после разбора HTML строго в порядке подключения. async выполняется сразу по загрузке, порядок не гарантирован, поэтому a.js может запуститься раньше lib.js.

Варианты ответа

  1. Обоим поставить async
  2. Не ставить атрибутов и перенести в <head>
  3. Обоим поставить defer в нужном порядкеправильный ответ
  4. lib.js с async, a.js с defer

Разбор

defer-скрипты качаются параллельно и выполняются после разбора HTML строго в порядке подключения. async выполняется сразу по загрузке, порядок не гарантирован, поэтому a.js может запуститься раньше lib.js. Скрипты без атрибутов в <head> блокируют разбор. Смешивание async и defer тоже не гарантирует, что lib.js успеет первым.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.