\n\n\n

Контент страницы

\n \n \n \n\n\n```\n\n### Подробный порядок выполнения\n\n**Фаза 1: Парсинг HTML и загрузка ресурсов**\n\n1. Браузер начинает парсить HTML сверху вниз\n2. **Стили (``)** загружаются **параллельно** и не блокируют парсинг\n3. **Скрипты (` \n \n \n \n\n\n \n

Заголовок

\n\n```\n\n### Влияние стилей на отрисовку\n\n**Стили блокируют отрисовку (Paint)**, но не парсинг:\n\n```html\n\n \n \n\n\n

Этот текст не будет видим, пока не загрузятся стили

\n\n```\n\nЭто называется **FOUC (Flash of Unstyled Content)** — если стили загружаются долго, пользователь видит неформатированную страницу.\n\n### Оптимизация: атрибуты скриптов\n\n**async** — загружается параллельно, выполняется сразу после загрузки (блокирует парсинг):\n\n```html\n\n \n \n \n \n \n\n\n

Контент может быть показан раньше (зависит от скорости загрузки)

\n\n```\n\n**defer** — загружается параллельно, выполняется после парсинга в порядке появления:\n\n```html\n\n \n \n \n \n\n\n

Контент парсится немедленно

\n\n```\n\n### Сравнение: Normal vs async vs defer\n\n```\nNORMAL (no attributes):\nParse HTML -> STOP -> Load script -> Execute -> Continue Parse -> Render\n (блокирует)\n\nASYNC:\nParse HTML ---------> STOP (при загрузке) -> Execute -> Continue Parse -> Render\n Load async (параллельно)\n\nDEFER:\nParse HTML ---------> Continue Parse -> Render -> Load -> Execute\n Load defer (параллельно)\n```\n\n### Практический пример оптимальной структуры\n\n```html\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n

Основной контент

\n \n \n \n \n \n \n \n\n\n```\n\n### Resource Hints для оптимизации\n\n```html\n\n \n \n \n \n \n \n \n \n \n \n \n\n```\n\n### Типичный порядок в Next.js приложении\n\n```html\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n
\n \n \n \n\n```\n\n### Метрики производительности\n\n**First Contentful Paint (FCP)** — когда появляется первый контент\n**Largest Contentful Paint (LCP)** — когда загружается основной контент\n**Time to Interactive (TTI)** — когда страница становится интерактивной\n\nВсе эти метрики зависят от правильного порядка загрузки!\n\n### Лучшие практики\n\n1. **Помещай стили в ``** — они должны загружаться рано\n2. **Помещай скрипты в конец ``** или используй `defer`\n3. **Используй `async` только для независимых скриптов** (аналитика, реклама)\n4. **Критичные скрипты используй `defer`** для сохранения порядка\n5. **Используй preload/prefetch** для предварительной загрузки ресурсов\n6. **Минимизируй блокирующие ресурсы** — это ключ к быстрой странице\n\nПравильный порядок загрузки может улучшить Core Web Vitals и пользовательский опыт.","dateCreated":"2026-04-02T22:03:24.630171","upvoteCount":0,"author":{"@type":"Person","name":"claude-haiku-4.5"}}}}
← Назад к вопросам

В каком порядке будут грузиться стили и скрипты на странице

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

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

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

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

В каком порядке будут грузиться стили и скрипты на странице

Порядок загрузки ресурсов в браузере — фундаментальное понимание для оптимизации производительности. Это влияет на время до первого отображения контента и интерактивности.

Базовый порядок загрузки

<!DOCTYPE html>
<html>
<head>
  <!-- 1. Стили грузятся параллельно -->
  <link rel="stylesheet" href="style.css">
  <link rel="stylesheet" href="bootstrap.css">
  
  <!-- 2. Скрипты в head блокируют парсинг -->
  <script src="analytics.js"></script>
</head>
<body>
  <h1>Контент страницы</h1>
  
  <!-- 3. Скрипты в конце body выполняются после парсинга HTML -->
  <script src="app.js"></script>
</body>
</html>

Подробный порядок выполнения

Фаза 1: Парсинг HTML и загрузка ресурсов

  1. Браузер начинает парсить HTML сверху вниз
  2. Стили (<link>) загружаются параллельно и не блокируют парсинг
  3. Скрипты (<script>) в <head> блокируют парсинг — браузер ждет загрузки и выполнения
<head>
  <link rel="stylesheet" href="style.css"> <!-- Загружается параллельно -->
  <link rel="stylesheet" href="theme.css"> <!-- Загружается параллельно -->
  
  <script src="jquery.js"></script> <!-- БЛОКИРУЕТ ПАРСИНГ -->
  <!-- Браузер ждет, пока jquery загрузится и выполнится -->
  
  <script src="app.js"></script> <!-- Выполнится только после jquery -->
</head>
<body>
  <!-- Парсинг продолжится только после всех скриптов в head -->
  <h1>Заголовок</h1>
</body>

Влияние стилей на отрисовку

Стили блокируют отрисовку (Paint), но не парсинг:

<head>
  <!-- Браузер парсит HTML, но НЕ рисует до загрузки стилей -->
  <link rel="stylesheet" href="critical.css">
</head>
<body>
  <h1>Этот текст не будет видим, пока не загрузятся стили</h1>
</body>

Это называется FOUC (Flash of Unstyled Content) — если стили загружаются долго, пользователь видит неформатированную страницу.

Оптимизация: атрибуты скриптов

async — загружается параллельно, выполняется сразу после загрузки (блокирует парсинг):

<head>
  <!-- Загружается параллельно, но блокирует при выполнении -->
  <script src="analytics.js" async></script>
  
  <!-- Выполнится сразу после загрузки, когда браузер найдет его -->
  <script src="tracking.js" async></script>
</head>
<body>
  <h1>Контент может быть показан раньше (зависит от скорости загрузки)</h1>
</body>

defer — загружается параллельно, выполняется после парсинга в порядке появления:

<head>
  <!-- Загружается параллельно, выполняется в порядке -->
  <script src="jquery.js" defer></script>
  <script src="app.js" defer></script>
  <!-- app.js выполнится ТОЛЬКО после jquery благодаря defer -->
</head>
<body>
  <h1>Контент парсится немедленно</h1>
</body>

Сравнение: Normal vs async vs defer

NORMAL (no attributes):
Parse HTML -> STOP -> Load script -> Execute -> Continue Parse -> Render
             (блокирует)

ASYNC:
Parse HTML ---------> STOP (при загрузке) -> Execute -> Continue Parse -> Render
         Load async (параллельно)

DEFER:
Parse HTML ---------> Continue Parse -> Render -> Load -> Execute
         Load defer (параллельно)

Практический пример оптимальной структуры

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width">
  
  <!-- Критичные стили в head (необходимы для первого отображения) -->
  <link rel="stylesheet" href="critical.css">
  
  <!-- Некритичные стили могут загружаться асинхронно -->
  <link rel="stylesheet" href="main.css" media="print" onload="this.media=all">
  
  <!-- Google Analytics с async -->
  <script async src="https://www.googletagmanager.com/gtag/js"></script>
</head>
<body>
  <h1>Основной контент</h1>
  
  <!-- Тяжелые скрипты в конце body с defer -->
  <script src="vendor.js" defer></script>
  <script src="app.js" defer></script>
  
  <!-- Инлайн скрипты минимизируют -->
  <script>
    // Только критичный код
    console.log("Page loaded");
  </script>
</body>
</html>

Resource Hints для оптимизации

<head>
  <!-- Preload: загрузить рано, но отложить выполнение -->
  <link rel="preload" href="font.woff2" as="font">
  
  <!-- Prefetch: загрузить в фоне, если есть время -->
  <link rel="prefetch" href="next-page.html">
  
  <!-- DNS prefetch: разрешить DNS заранее -->
  <link rel="dns-prefetch" href="https://cdn.example.com">
  
  <!-- Preconnect: установить соединение заранее -->
  <link rel="preconnect" href="https://cdn.example.com">
</head>

Типичный порядок в Next.js приложении

<head>
  <!-- 1. Fonts первыми (критичные) -->
  <link rel="preload" href="/fonts/inter.woff2" as="font">
  
  <!-- 2. Inline критичный CSS -->
  <style>/* critical CSS */</style>
  
  <!-- 3. Остальные стили -->
  <link rel="stylesheet" href="/_next/static/css/main.css">
  
  <!-- 4. Некритичные ресурсы -->
  <link rel="prefetch" href="/_next/static/chunks/main.js">
</head>
<body>
  <div id="__next"></div>
  
  <!-- 5. Основной бандл в конце -->
  <script src="/_next/static/chunks/main.js" defer></script>
</body>

Метрики производительности

First Contentful Paint (FCP) — когда появляется первый контент Largest Contentful Paint (LCP) — когда загружается основной контент Time to Interactive (TTI) — когда страница становится интерактивной

Все эти метрики зависят от правильного порядка загрузки!

Лучшие практики

  1. Помещай стили в <head> — они должны загружаться рано
  2. Помещай скрипты в конец <body> или используй defer
  3. Используй async только для независимых скриптов (аналитика, реклама)
  4. Критичные скрипты используй defer для сохранения порядка
  5. Используй preload/prefetch для предварительной загрузки ресурсов
  6. Минимизируй блокирующие ресурсы — это ключ к быстрой странице

Правильный порядок загрузки может улучшить Core Web Vitals и пользовательский опыт.