Блокирует ли рендеринг страницы подключение скриптов

Ответ

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

Чтобы избежать блокировки, используйте атрибуты:

  • async - скрипт загружается асинхронно и выполняется сразу после загрузки, не блокируя рендеринг
  • defer - скрипт загружается асинхронно, но выполняется после полного парсинга HTML

Пример:

<script src="script.js" async></script> <!-- Не блокирует рендеринг -->
<script src="script.js" defer></script> <!-- Выполнится после DOMContentLoaded -->

Для критически важного кода лучше использовать defer, чтобы сохранить порядок выполнения. async подходит для независимых скриптов (аналитика, реклама).

Ответ 18+ 🔞

Да ты посмотри, какая дичь творится! Берёшь ты обычный скрипт, суёшь его в <head>, а он, блядь, как слон в посудной лавке — весь рендеринг страницы встаёт колом, пока этот файл не скачается и не отработает! Браузер тупо замирает и ждёт, как идиот. Пиздец, да?

Ну а как иначе, спрашивается? А вот так, ёпта! Есть два волшебных пинка, которые этому слону в жопу дадут:

  • async — это типа «качайся, сука, в фоне, но как только загрузился — сразу впердоливайся в выполнение». Порядок? Какой, нахуй, порядок? Кто первый встал — того и тапки. Для аналитики и прочей рекламной хуйни — самое то.
  • defer — это поумнее. «Качайся спокойно, браток, не мешай HTML строиться, а выполнишься ты у меня тогда, когда весь документ уже готов будет». И что главное — порядок скриптов сохраняется, ёбаный в рот! Для всего важного, что от DOM зависит — идеально.

Смотри, как красота выглядит:

<script src="analytics.js" async></script>  <!-- Насрал и забыл, порядок не важен -->
<script src="main.js" defer></script>       <!-- Выполнится аккуратненько после всей разметки -->

Вот и вся магия, блядь. Не усложняй, а то мозги набекрень.