Как оптимизировать CSS для повышения производительности

Ответ

  1. Минификация – удаление пробелов, комментариев и сокращение кода:
    /* До */
    .header { color: #ffffff; }
    /* После */
    .header{color:#fff}
  1. Использование CSS-препроцессоров (Sass, Less) для модульности и переменных.

  2. Уменьшение вложенности (особенно в BEM/Sass) – избегаем глубоких селекторов:

    /* Плохо */
    .block__element--modifier span { ... }
    /* Лучше */
    .block__text { ... }
  1. Critical CSS – встраивание ключевых стилей прямо в <head> для ускорения первой отрисовки.

  2. Удаление неиспользуемого кода (PurgeCSS, UnCSS).

  3. Оптимизация анимаций – используем transform и opacity вместо top/left:

    /* Хорошо */
    .box { transform: translateX(100px); }
    /* Плохо */
    .box { left: 100px; }
  1. Сжатие и кэширование на сервере (gzip, Brotli).

Ответ 18+ 🔞

А, ну вот, опять про эти ваши CSS-оптимизации! Слушай, давай я тебе по-человечьи, на пальцах, объясню, как не накосячить и не получить сайт, который грузится, как говно в проруби.

1. Минификация — это когда ты из красивого, читабельного кода делаешь одну сплошную строку.
Было у тебя:

/* Красиво, с отступами, всё понятно */
.header {
  color: #ffffff;
}

А стало:

.header{color:#fff}

Вот и вся магия. Пробелы выкинул, комментарии нахуй, #ffffff сократил до #fff. Браузеру всё равно, а весит меньше. Делается это автоматом всякими сборщиками (типа Webpack, Gulp), чтобы руками не ебаться.

2. Препроцессоры (Sass/Less).
Это когда ты пишешь не в чистом CSS, а с прибамбасами: переменные, вложенность, миксины. Охуенно удобно, особенно когда проект большой.
Например, завёл переменную для основного цвета:

$main-color: #ff6b6b;
.button {
  background: $main-color;
}

Захотел поменять цвет — поправил в одном месте, а не бегай по всему файлу, как угорелый.

3. Уменьшение вложенности.
Особенно актуально для БЭМ и Sass. Не надо строить селекторы, как матрёшку, где чтобы добраться до span, нужно пройти через хуй, палец и красную армию.

/* Пиздец как плохо */
.block {
  .block__element {
    .block__element--modifier {
      span { ... } /* Да что ты, сука, делаешь?! */
    }
  }
}
/* А вот так — уже лучше */
.block__text { ... }

Чем проще селектор, тем быстрее браузер его найдёт. Не заставляй его ебать мозги.

4. Critical CSS.
Представь: пользователь зашёл на сайт, а ему сначала грузится какая-то хуйня, которая ниже экрана, а контент, который видно, тормозит. Вот чтобы такого не было, выдёргивай самые важные стили (для первого экрана) и вставляй их прямо в <head> страницы. Остальное подгрузится потом. Первый рендер — мгновенный, пользователь доволен.

5. Удаление неиспользуемого кода.
Ты накопипастил пол-интернета из Bootstrap, а используешь только кнопку да сетку. Остальное — мёртвый груз. Инструменты вроде PurgeCSS просканируют твой HTML/JS и выкинут из финального CSS-файла всё, что не пригодилось. Красота!

6. Оптимизация анимаций.
Запомни раз и навсегда: если анимируешь что-то, что должно двигаться/меняться плавно — юзай transform и opacity.

/* Хорошо, работает на GPU, гладко как жопа младенца */
.box { transform: translateX(100px); transition: transform 0.3s; }

/* Плохо, тормозит, дёргается, в рот меня чих-пых */
.box { left: 100px; transition: left 0.3s; }

Браузеру проще пересчитывать трансформации, чем перерисовывать геометрию элемента каждый кадр.

7. Сжатие и кэширование на сервере.
Твой CSS-файл может весить, допустим, 100 КБ. Сервер может сжать его в gzip или Brotli (ещё круче) до, скажем, 20 КБ. И отдать браузеру уже в сжатом виде. А потом сказать: «Чувак, сохрани это у себя в кэше, на недельку, чтобы в следующий раз не качать заново».
Настраивается это в конфиге сервера (Nginx/Apache). Если не умеешь — гугли или проси админа, пусть ебётся.

Вот, собственно, и всё. Если будешь придерживаться этих правил, твои стили будут не только работать, но и летать. А если нет — ну, что ж, получай тормознутый сайт и злых пользователей. Выбор за тобой, ёпта.