divmagic Make design
SimpleNowLiveFunMatterSimple
Отправка большего количества CSS на самом деле может улучшить производительность — неочевидное открытие GitHub
Blogs›CSSCSS›Отправка большего количества CSS на самом деле может улучшить производительность — неочевидное открытие GitHub
CSSCSS

Отправка большего количества CSS на самом деле может улучшить производительность — неочевидное открытие GitHub

Отправка большего количества CSS может на самом деле улучшить производительность: неочевидное открытие GitHub

Когда инженеры GitHub взялись за оптимизацию Largest Contentful Paint (LCP) своего сайта, они наткнулись на открытие, которое переворачивает традиционную фронтенд-мудрость с ног на голову: увеличение объема отправляемого CSS может ускорить ваш сайт. В подробной статье в блоге GitHub команда объяснила, как они улучшили производительность страницы, встраивая критический CSS и отправляя дополнительные стили заранее, а не откладывая их. Эта статья раскрывает их подход, обоснование «больше CSS — меньше ожидания» и то, что это означает для современных стратегий веб-производительности. Мы также рассмотрим, как такие инструменты, как DivMagic, позволяют изучать и воспроизводить подобные оптимизации UI и стилей за секунды, без догадок.

27%
reduction in Largest Contentful Paint for GitHub.com after the optimization

Парадокс производительности: как меньший объем CSS может быть дороже

Исторически руководства по производительности призывали нас уменьшать размер CSS: минифицировать, удалять неиспользуемые стили, разделять пакеты и загружать асинхронно. Логика здравая: меньше байт — быстрее загрузка. Но анализ GitHub выявил скрытую стоимость: блокирующее рендеринг поведение и сдвиги макета , вызванные поздней загрузкой CSS. Когда критические стили недоступны немедленно, браузер отрисовывает неполные макеты, а затем перерисовывает их после получения стилей. Эта задержка отодвигает LCP и создает неприятный пользовательский опыт.

Встраивая больше CSS непосредственно в <head>, GitHub устранил сетевой обход для стилей, необходимых для первого видимого контента. Общий объем CSS вырос, но критический путь резко сократился. LCP упал с 10,2 с до 3,4 с в их измеренных улучшениях, что стало переломным моментом для SEO и удовлетворенности пользователей.

Разбор подхода GitHub: больше CSS, раньше

В посте в блоге GitHub описывается серия экспериментов. Ранние попытки разделяли CSS на критический (встроенный) и некритический (загружаемый асинхронно). Измерения показали, что асинхронная загрузка все еще вызывала видимую вспышку нестилизованного контента и заставляла браузер пересчитывать стили и макет после получения полного CSS. Затем команда добавила больше CSS во встроенный блок, по сути отправляя больший начальный объем CSS, и обнаружила, что браузер может отрисовать окончательный макет за один проход. Хотя размер загрузки увеличился, метрики First Paint, First Contentful Paint и LCP улучшились.

plans, design, web design, designer, desk, document, drawing, iphone, notebook, paper, pen, sketching, design, design, web design, web design, web design, web design, web design, designer

Измерение реального влияния

GitHub сообщил следующие метрики для репрезентативной страницы после отправки большего количества CSS:

MetricBefore (async CSS)After (inline all)Improvement
LCP10.2s3.4s67% faster
First Contentful Paint5.1s1.8s65% faster
CSS payload12 KB35 KB3x larger

Обратите внимание, что объем CSS утроился, но ключевые временные показатели отрисовки улучшились более чем на 60%. Вывод: пропускная способность дешева; пересчеты макета дороги.

«Лучший CSS — это тот, который есть у браузера, как только он начинает отрисовывать страницу, даже если это означает отправку большего его количества».

Почему встроенный CSS превосходит отдельные таблицы стилей, даже для «некритических» стилей

Чтобы понять успех GitHub, нужно разобрать, что происходит при асинхронной загрузке таблицы стилей:

  • Браузер начинает рендеринг без полного контекста стилей, часто полагаясь на CSS по умолчанию.
  • После завершения загрузки асинхронного CSS объектная модель CSS перестраивается.
  • Затем браузер пересчитывает макет и перерисовывает всю страницу, потенциально смещая элементы.
  • Этот сдвиг запускает дополнительные проходы макета для зависимых ресурсов (изображения, шрифты).
  • Весь процесс задерживает момент, когда самый большой видимый элемент окончательно устанавливается, отодвигая LCP еще дальше.

Встраивая щедрый набор стилей, GitHub гарантирует, что первая отрисовка браузера уже включает окончательный макет в 90% случаев. Дополнительные килобайты, всего несколько десятков КБ даже после роста, незначительны на современных соединениях. Напротив, «тряска» макета от асинхронного CSS может стоить сотен миллисекунд.

Когда «больше CSS» становится слишком много?

GitHub не стал встраивать всю свою дизайн-систему объемом 200 КБ. Они тщательно отобрали стили, влияющие на контент «над сгибом», а также любые компоненты, которые могут вызвать сдвиги макета при позднем стилизации. Используя анализ покрытия в Chrome DevTools, они определили, какие CSS-правила использовались в течение первых двух секунд, и расставили их приоритеты. Результат — прагматичная золотая середина: достаточно встроенного CSS для устранения перекомпоновок, но не настолько много, чтобы HTML-документ неоправданно раздувался.

Извлечение критического CSS: традиционные инструменты против DivMagic

Разработчики обычно полагаются на такие инструменты, как Critical, purifycss или ручное извлечение, чтобы изолировать стили «над сгибом». Эти подходы требуют тщательной настройки, интеграции в конвейер сборки и частого обслуживания по мере развития интерфейсов. DivMagic меняет правила игры: он захватывает вычисленные CSS именно тех элементов, на которые вы указываете, прямо с отрисованной страницы. Это означает, что вы можете выборочно извлекать точные стили, которые GitHub или любой эталонный сайт использует для своих критически важных для производительности разделов-героев, навигации, карточек и многого другого.

code, html, digital, coding, web, programming, computer, technology, internet, design, development, website, web developer, web development, programming code, data, page, computer programming, software, site, css, script, web page, website development, www, information, java, screen, code, code, code, html, coding, coding, coding, coding, coding, web, programming, programming, computer, technology, website, website, web development, software

90%
of the CSS needed for a stable first paint can be identified with just a few clicks in DivMagic

Графическое доказательство: эволюция LCP в ходе экспериментов

Собственные данные GitHub поразительны. Диаграмма ниже иллюстрирует, как LCP снижался по мере перехода от полностью отложенного CSS к агрессивной стратегии встраивания. Каждый шаг добавлял больше CSS в начальную полезную нагрузку.

Largest Contentful Paint (LCP) in Seconds

Прогресс очевиден: каждый дополнительный блок встроенного CSS снижал LCP до достижения плато, после которого дальнейшее встраивание давало убывающую отдачу. Эта «золотая середина» — именно то, к чему должна стремиться каждая команда: не слепо встраивать всё, а систематически включать наиболее важные стили.

Что это означает для эпохи «Mobile First» и Core Web Vitals

Основные веб-показатели Google (Core Web Vitals) делают упор на LCP, First Input Delay (FID) и Cumulative Layout Shift (CLS). Техника GitHub напрямую атакует LCP и CLS одновременно: больше CSS заранее означает более раннюю отрисовку самого большого элемента и меньше сдвигов макета впоследствии. Для сайтов электронной коммерции, новостей и документации это может быть разницей между проходным и непроходным баллом CWV.

insect, spider web, spider, close up, macro, species, spider web, spider web, spider web, spider web, spider web, spider, spider

3.4s
post-optimization LCP lands firmly in the 'Good' range of Core Web Vitals

Важно отметить, что этот метод не требует полного переписывания кода. Команда GitHub внедряла инкрементальные изменения в существующую серверную архитектуру. Вы можете начать с аудита текущего элемента LCP и встраивания стилей, которые напрямую на него влияют. DivMagic помогает быстро собрать точные стили и их зависимости с живой страницы, чтобы вы могли создать прототип встроенного блока за считанные минуты.

Спектр компромиссов: размер против скорости

Универсального ответа не существует: оптимальный объем встроенного CSS зависит от сетевых условий ваших пользователей и сложности макета. Диаграмма ниже показывает концептуальную зависимость: по мере добавления CSS в начальную загрузку размер загрузки увеличивается, но рендеринг становится быстрее и стабильнее — до определенного предела.

Trade-offs: CSS Size vs Paint Timings

Цель — двигаться по нисходящей траектории времени рендеринга, без излишнего увеличения размера HTML. Инженерный блог GitHub рекомендует тщательно отслеживать полезную нагрузку документа и устанавливать бюджет; для них оптимальным объемом встроенного CSS было 30–40 КБ. Ваш бюджет может отличаться, но метод универсален.

Практические шаги для повторения успеха GitHub

  1. Определите элемент LCP. Используйте Lighthouse или WebPageTest, чтобы найти DOM-элемент, влияющий на ваш показатель LCP.
  2. Извлеките полную цепочку его стилей. Откройте DivMagic на странице, выберите элемент LCP и скопируйте полный CSS, включая унаследованные стили и пользовательские свойства. Это даст вам надежный начальный набор.
  3. Встройте эти стили в <head>. Протестируйте локально или в среде staging, вставив критический CSS непосредственно перед любыми ссылками на внешние таблицы стилей.
  4. Измерьте время отрисовки. Сравните LCP, FCP и CLS до и после. Постепенно расширяйте встроенный блок, чтобы охватить больше компонентов «над сгибом», пока улучшения не перестанут расти.
  5. Автоматизируйте для динамических страниц. Используйте серверную логику для встраивания CSS для каждого типа страниц, применяя шаблоны, обнаруженные с помощью DivMagic.

Роль HTTP/2 и современных протоколов

Можно утверждать, что мультиплексирование HTTP/2 должно сделать загрузку множества мелких файлов дешевой, снижая необходимость встраивания. Хотя это верно, блокирующий рендеринг характер CSS остается: даже если запрос таблицы стилей отправляется параллельно, браузер все равно должен дождаться ее загрузки, парсинга и построения CSSOM, прежде чем выполнять любую отрисовку, зависящую от нее. Встраивание обходит весь жизненный цикл сетевого запроса, экономя критические миллисекунды, особенно на мобильных соединениях с высокой задержкой.

Как DivMagic ускоряет ваш рабочий процесс с критическим CSS

DivMagic — это расширение для браузера, которое позволяет щелкнуть любой элемент интерфейса и мгновенно скопировать его точный CSS. Для разработчиков, ориентированных на производительность, это означает:

  • Возможность увидеть точные стили, которые высокопроизводительный сайт, такой как GitHub, использует для своего LCP.
  • Преобразование этих стилей в повторно используемые фрагменты кода без открытия DevTools.
  • Экспорт CSS в формате Tailwind, CSS-модулей или обычного CSS, готового к встраиванию.
  • Более быстрая итерация: вы можете изучать несколько эталонных сайтов и комбинировать их лучшие шаблоны.
2x
faster critical CSS generation by eliminating manual extraction

Поскольку DivMagic копирует вычисленные стили, вам не нужно выяснять, в каком файле таблицы стилей находится правило, или беспокоиться о цепочках наследования. Вывод — это именно то, что применяет браузер, идеально подходит для создания встроенного блока, соответствующего финальному макету.

Заключение: переучиваться, чтобы освоить веб-производительность

Опыт GitHub напоминает нам, что производительность — это не догматическое уменьшение ресурсов, а оптимизация восприятия скорости пользователем. Отправка большего количества CSS, если это делается продуманно, устраняет дорогостоящие перекомпоновки и быстрее доставляет визуально завершенную страницу. В следующий раз, когда вам скажут «уменьшите размер CSS», спросите вместо этого: «Какой CSS браузер должен получить с самого первого байта?»

«Производительность — это не доставка меньшего, а доставка правильных вещей в правильное время.»

С DivMagic захват этого «правильного CSS» становится тривиальной операцией, позволяя вам сосредоточиться на том, что действительно имеет значение: более быстрая отрисовка, довольные пользователи и лучшие показатели Core Web Vitals.

Начните создавать с помощью DivMagic сегодня

Присоединяйтесь к более чем 10 000 разработчиков, дизайнеров и владельцев бизнеса, чтобы копировать код с любого веб-сайта и использовать его в своих проектах.

Get DivMagic for 42% off

Limited time deal for 22:45