Оптимізація CSS: critical CSS та purge невикористаних стилів

Оптимізація CSS: critical CSS та purge невикористаних стилів

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Оптимізація CSS: critical CSS та purge невикористаних стилів
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1421
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1248
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    999

Оптимізація CSS: critical CSS та purge невикористаних стилів

Повільне завантаження сторінки часто пов'язане з надлишковим CSS. Render-blocking CSS затримує перший контентний рендер (FCP) і збільшує Largest Contentful Paint (LCP). Bootstrap з коробки важить 140 кБ, але після видалення невикористаних класів залишається 5–15 кБ (зниження на 96%). Tailwind у development-режимі — 3.5 МБ; після purge — 5–50 кБ. Ми маємо 7+ років досвіду в оптимізації CSS та реалізували 50+ проєктів. На ринку з 2018 року (7+ років). Ми налаштовуємо critical CSS та purge для будь-якого стеку: від Laravel до Next.js, досягаючи FCP < 1 секунди. Результат — проходять Core Web Vitals без компромісів. За 2–3 дні впроваджуємо critical CSS та purge під ключ.

Чому оптимізація CSS критична для Core Web Vitals?

LCP (Largest Contentful Paint) — час рендерингу найбільшого елемента на екрані. Якщо CSS завантажується синхронно (render-blocking), браузер не малює контент до повного завантаження стилів. Inline critical CSS усуває цю затримку: стилі для above-the-fold контенту вставляються прямо в <head>, решта завантажується асинхронно. Critical CSS у поєднанні з purge прискорює LCP у 2-3 рази порівняно з традиційним завантаженням CSS.

Приклад: на сайті з Bootstrap у critical CSS потрапляють лише стилі для шапки, героя та кнопок — близько 5 кБ замість 140 кБ. LCP падає з 4 до 1.5 секунд (покращення на 62%). FCP знижується з 2.5 до 1.2 секунд.

Налаштування purge CSS

Purge видаляє класи, не знайдені в шаблонах. У Tailwind 3+ purge вбудовано через конфіг content:

// tailwind.config.ts import type { Config } from 'tailwindcss'; export default { content: [ './resources/views/**/*.blade.php', './resources/js/**/*.{ts,tsx}', './resources/js/**/*.json', // якщо класи генеруються динамічно ], theme: { extend: {} }, plugins: [], } satisfies Config; 

Динамічні класи (конкатенація рядків) — purge не знайде їх:

// Погано — purge не побачить const color = 'red'; <div className={`text-${color}-500`} /> // Добре — повні імена класів const colorMap = { red: 'text-red-500', blue: 'text-blue-500', }; <div className={colorMap[color]} /> 

Safelist: призначення та налаштування

Safelist — білий список класів, які purge не повинен видаляти. Іноді класи додаються через JavaScript, наприклад, Bootstrap модалки: modal-open, show. Якщо вони не зустрічаються в HTML-шаблонах, purge видалить їх — зламається функціональність. Налаштовуємо safelist у конфігу PurgeCSS:

// postcss.config.js import purgecss from '@fullhuman/postcss-purgecss'; export default { plugins: [ purgecss({ content: [ './resources/views/**/*.blade.php', './resources/js/**/*.tsx', './public/**/*.html', ], safelist: { standard: ['modal-open', 'show', 'active', 'fade'], deep: [/^modal/, /^alert/, /^toast/], greedy: [/swiper/], }, defaultExtractor: content => content.match(/[\w-/:]+(?<!:)/g) || [], }), ], }; 

Покрокове налаштування purge CSS

  1. Аудит поточного CSS. Використовуємо Coverage в DevTools, аналіз бандлів, виявлення render-blocking.
  2. Конфігурація purge. Налаштовуємо PurgeCSS або Tailwind JIT, вказуємо шляхи до шаблонів.
  3. Створення safelist. Додаємо класи, що використовуються динамічно (модалки, алерти, анімації).
  4. Тестування. Перевіряємо, що нічого не зламалося, візуальний регрес.
  5. Деплой. Інтегруємо purge у збірку (Vite, Webpack, Laravel Mix) і розгортаємо на production.

Вибір стратегії: runtime CSS vs статичний CSS

CSS-in-JS (styled-components, Emotion) генерують стилі в runtime — додаткове навантаження на JS. Для production переважніший статичний CSS. Tailwind JIT працює в 10 разів швидше за попередні версії PurgeCSS, а PurgeCSS робить CSS-файл у 10-20 разів меншим.

Параметр CSS-in-JS Static CSS (Tailwind, CSS Modules)
Runtime overhead Так Ні
Розмір бандлу +50–150 кБ (runtime) 0 кБ
Tree-shaking Складний Простий
Підтримка SSR Вимагає налаштування З коробки
CSS Containment Відсутня Можливість використання

Статичний CSS кращий для Core Web Vitals: він не блокує рендеринг (після critical inline) і менше навантажує CPU. Для динамічного контенту можна використовувати content-visibility: auto, а також CSS containment (contain: layout style paint) для ізоляції компонентів та покращення продуктивності ререндеру.

Для Vite critical CSS налаштовується через critters:

// vite.config.ts import { defineConfig } from 'vite'; import { critters } from 'critters'; export default defineConfig({ plugins: [ critters({ preload: 'media', pruneSource: true, logLevel: 'silent', }) ] }); 

У Laravel critical CSS вставляється вручну:

<style>{!! file_get_contents(public_path('css/critical.css')) !!}</style> <link rel="preload" href="{{ mix('css/app.css') }}" as="style" onload="this.onload=null;this.rel='stylesheet'"> <noscript> <link rel="stylesheet" href="{{ mix('css/app.css') }}"> </noscript> 

Мініфікація — виконується LightningCSS у Vite або cssnano. Попередня обробка за допомогою LightningCSS використовує modern CSS features (nesting, layers) та конвертує їх у поліфіли для старих браузерів. На виході: CSS bundle < 20 кБ, покриття > 80%.

Порівняння метрик до та після покращення

Метрика До оптимізації Після
Розмір CSS (Bootstrap) 140 кБ 5 кБ
LCP 4.0 с 1.5 с
FCP 2.5 с 1.2 с
TTFB 0.8 с 0.6 с (без змін)
Типові помилки при оптимізації CSS
  • Ігнорування динамічних класів — purge видаляє їх, ламаючи інтерфейс.
  • Неправильний safelist — модальні вікна, алерти перестають стилізуватися.
  • Critical CSS не оновлюється при зміні контенту.
  • Забувають про iframe та сторонні скрипти — їх CSS теж впливає на метрики.
  • Переоптимізація: видалення класів, що використовуються в неочевидних місцях (архіви, статичні сторінки).

Що входить у роботу з прискорення CSS?

  • Аудит поточного CSS: Coverage в DevTools, аналіз бандлів, виявлення render-blocking.
  • Налаштування purge: конфігурація PurgeCSS або Tailwind JIT, створення safelist.
  • Витяг critical CSS: автоматично через critters або вручну за допомогою npx critical.
  • Мініфікація та стиснення: LightningCSS / esbuild, Gzip / Brotli.
  • Інтеграція у збірку: Vite, Webpack, Laravel Mix, Next.js.
  • Перевірка метрик: LCP, FCP, TBT до та після.
  • Документація: опис налаштувань, рекомендації щодо підтримки.

Результат: проходження Core Web Vitals, CSS bundle мінімального розміру, збереження функціональності та стилів.

Ми використовуємо PurgeCSS, Tailwind JIT, critters та PostHTML залежно від стеку. Все налаштовується під вашу збірку. Гарантуємо покращення LCP на 40-60% або проведемо додаткову оптимізацію безкоштовно.

Вартість нашої роботи — від 5000 грн за проєкт, що окупається за місяць завдяки прискоренню сайту. Економія на трафіку після оптимізації може сягати 2000-5000 грн на місяць. Зв'яжіться з нами для детального аудиту вашого проєкту. Отримайте консультацію щодо відповідних інструментів. Оцінимо ваш CSS за 1 день. Замовте покращення CSS та прискорте ваш сайт.