\n \n\n\n \n\n```\n\nЕсли `jquery.js` загружается 2 секунды, пользователь ждёт 2 секунды **белого экрана**.\n\n### Решение 1: async\n\n```javascript\n\n```\n\n**async** означает:\n- Скрипт загружается **параллельно** с парсингом HTML\n- Выполняется **как только загрузится**, не дожидаясь других скриптов\n- **Порядок выполнения не гарантирован**\n\nИдеален для независимых скриптов (аналитика, реклама).\n\n### Решение 2: defer\n\n```javascript\n\n```\n\n**defer** означает:\n- Скрипт загружается **параллельно** с парсингом HTML\n- Выполняется **после** полной загрузки HTML\n- **Порядок сохраняется** — важно для зависимостей\n\n```javascript\n\n\n \n```\n\n### Решение 3: перенести в конец body\n\n```javascript\n\n

Контент видит пользователь

\n

Пока загружаются скрипты

\n \n \n \n\n```\n\nКонтент отображается мгновенно, скрипты загружаются после.\n\n### Решение 4: динамическая загрузка\n\n```javascript\nfunction loadScript(src) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = src;\n script.onload = resolve;\n script.onerror = reject;\n document.body.appendChild(script);\n });\n}\n\nawait loadScript('/app.js');\n```\n\n### Рекомендации\n\n**Для HEAD используй:**\n- **defer** для основных скриптов приложения\n- **async** для независимых (аналитика, реклама)\n\n**Для BODY используй:**\n- Обычные скрипты в конце — простейший вариант\n\n**Для современных приложений (Next.js, React):**\n- Уже оптимизируют загрузку чанков\n- Используй компоненты фреймворка для управления скриптами","dateCreated":"2026-04-02T22:19:37.719914","upvoteCount":0,"author":{"@type":"Person","name":"claude-haiku-4.5"}}}}
← Назад к вопросам

Нужно ли ждать загрузки всего скрипта при наличии script в head без атрибута async?

1.0 Junior🔥 61 комментариев
#Браузер и сетевые технологии

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Блокировка загрузки при скрипте в head без async

Да, браузер будет ждать загрузки и выполнения всего скрипта перед тем, как продолжить парсинг HTML. Это критично для пользовательского опыта.

Как это работает

Когда браузер встречает обычный <script> тег в <head>:

  1. Парсинг HTML приостанавливается
  2. Загружается скрипт с сервера
  3. Выполняется скрипт полностью
  4. Только потом парсинг HTML продолжается

Это означает, что пользователь видит белый экран дольше, чем мог бы.

Проблема

<!-- Плохо: блокирует весь DOM -->
<head>
  <script src="/vendor/jquery.js"></script>
  <script src="/app.js"></script>
</head>
<body>
  <!-- Контент загружается очень медленно -->
</body>

Если jquery.js загружается 2 секунды, пользователь ждёт 2 секунды белого экрана.

Решение 1: async

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

async означает:

  • Скрипт загружается параллельно с парсингом HTML
  • Выполняется как только загрузится, не дожидаясь других скриптов
  • Порядок выполнения не гарантирован

Идеален для независимых скриптов (аналитика, реклама).

Решение 2: defer

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

defer означает:

  • Скрипт загружается параллельно с парсингом HTML
  • Выполняется после полной загрузки HTML
  • Порядок сохраняется — важно для зависимостей
<!-- Правильный порядок сохранится -->
<script defer src="/jquery.js"></script>
<script defer src="/app.js"></script> <!-- app.js точно выполнится после jquery -->

Решение 3: перенести в конец body

<body>
  <h1>Контент видит пользователь</h1>
  <p>Пока загружаются скрипты</p>
  
  <script src="/jquery.js"></script>
  <script src="/app.js"></script>
</body>

Контент отображается мгновенно, скрипты загружаются после.

Решение 4: динамическая загрузка

function loadScript(src) {
  return new Promise((resolve, reject) => {
    const script = document.createElement('script');
    script.src = src;
    script.onload = resolve;
    script.onerror = reject;
    document.body.appendChild(script);
  });
}

await loadScript('/app.js');

Рекомендации

Для HEAD используй:

  • defer для основных скриптов приложения
  • async для независимых (аналитика, реклама)

Для BODY используй:

  • Обычные скрипты в конце — простейший вариант

Для современных приложений (Next.js, React):

  • Уже оптимизируют загрузку чанков
  • Используй компоненты фреймворка для управления скриптами