- html5css.dev
- SEO
- Мобильное SEO
- Скорость сайта
- Минификация контента
Минификация контента
Минификация — гигиена, а не ускорение: после сжатия выигрыш измеряется процентами. Реальный эффект дают критический CSS, отложенные скрипты и удаление того, что не используется.
Что даёт минификация на самом деле
| Файл | Исходный | Минифицированный | После Brotli |
|---|---|---|---|
| CSS | 120 КБ | 95 КБ | 14 → 13 КБ |
| JS | 300 КБ | 180 КБ | 60 → 52 КБ |
| HTML | 90 КБ | 82 КБ | 12 → 11 КБ |
Цифры ориентировочные, но соотношение типичное: после сжатия разница — единицы процентов. Минифицировать стоит (это бесплатно на сборке), но искать ускорение нужно в другом месте.
Что даёт больше: четыре приёма
1. Критический CSS
Внешний CSS блокирует отрисовку: браузер не покажет ничего, пока не загрузит файл. Решение — встроить стили первого экрана в HTML, остальное подгрузить отложенно.
<style>/* критические стили первого экрана */</style>
<link rel="preload" href="/css/main.css" as="style"
onload="this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/css/main.css"></noscript>
2. Отложенные скрипты
<script src="/js/app.js" defer></script>
defer— по умолчанию для всего: не блокирует разбор, порядок сохраняется.async— для независимых счётчиков, где порядок не важен.- По требованию — чат, карта, видеоплеер грузятся по нажатию, а не при загрузке.
- Ничего в
<head>без атрибутов: такой скрипт блокирует отрисовку.
3. Удаление неиспользуемого
Откройте DevTools → Coverage и перезагрузите страницу. Красная часть полосы — загруженный, но не использованный код. Типичные источники:
- CSS-фреймворк целиком ради десятка классов.
- Иконочный шрифт с тысячей символов ради пятнадцати.
- Библиотека дат ради одной функции форматирования.
- Стили плагинов, отключённых год назад.
- Слайдер на страницах, где слайдера нет.
4. Сторонние скрипты
Чаще всего именно они портят INP: чат, пиксели, виджеты отзывов, карты. Правило простое — подключать по необходимости и после взаимодействия.
// чат загружается только при первом действии пользователя
const load = () => {
const s = document.createElement('script');
s.src = 'https://chat.example.com/widget.js';
document.body.appendChild(s);
};
['click','scroll','keydown'].forEach(e =>
addEventListener(e, load, {once: true, passive: true}));
Порядок работ
- Включить сжатие Brotli на сервере — самый большой эффект за наименьшие усилия.
- Убрать блокирующие скрипты из
<head>, проставитьdefer. - Вынести критический CSS в инлайн, остальное отложить.
- Прогнать Coverage и удалить неиспользуемое.
- Перевести сторонние виджеты на загрузку по требованию.
- Включить минификацию на сборке — как гигиену.
- Проверить полевые данные через месяц.
Итог
Минификация — последний по эффекту пункт списка, хотя исторически считался первым. Начинайте со сжатия и порядка загрузки ресурсов, продолжайте удалением неиспользуемого кода и отложенной загрузкой сторонних виджетов. Дальше — сжатие на стороне сервера.
Частые вопросы
Насколько минификация ускоряет сайт?
Немного. После сжатия Brotli разница между минифицированным и обычным кодом обычно составляет единицы процентов. Делать её нужно, но ждать от неё заметного эффекта не стоит.
Что такое критический CSS?
Стили, необходимые для отрисовки первого экрана. Их встраивают прямо в HTML, а остальной CSS подгружают отложенно. Это убирает блокировку отрисовки и заметно улучшает LCP.
Чем defer отличается от async?
defer откладывает выполнение до разбора документа и сохраняет порядок скриптов. async выполняет сразу по загрузке, порядок не гарантирован. Для большинства скриптов правильный выбор — defer.
Как понять, сколько кода не используется?
Вкладка Coverage в Chrome DevTools показывает долю загруженного, но не выполненного CSS и JS на конкретной странице. Часто оказывается, что не используется больше половины.