Какие проблемы может вызвать script в head без атрибута async

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

Ответ

Добавление <script> в <head> без async или defer блокирует парсинг HTML до загрузки и выполнения скрипта. Это приводит к:

  1. Задержке отображения страницы – браузер ждёт завершения скрипта, прежде чем отрендерить контент.
  2. Плохому UX – пользователь видит белый экран дольше.
  3. Снижению производительности – особенно критично для медленных сетей или тяжёлых скриптов.

Пример:

<head>
  <script src="heavy-script.js"></script> <!-- Блокирует рендеринг -->
</head>
<body>
  <!-- Контент появится только после выполнения heavy-script.js -->
</body>

Решение:

  • Используйте async для независимых скриптов (загружаются асинхронно, выполняются сразу после загрузки).
  • Используйте defer для скриптов, зависящих от DOM (выполняются после парсинга HTML).
  • Переносите скрипты перед закрывающим </body>, если они не критичны для начального рендера.