Что производительнее: CSS-модули или CSS-in-JS

Ответ

CSS Module обычно загружается быстрее, чем CSS-in-JS.

Причины:

  1. CSS Module генерирует обычный .css файл, который браузер парсит и применяет сразу после загрузки.
  2. CSS-in-JS требует выполнения JavaScript для генерации стилей, что добавляет задержку (FOUC — Flash of Unstyled Content).

Пример:

/* styles.module.css */
.button {
  background: blue;
}
// Component.js
import styles from './styles.module.css';
const Button = () => <button className={styles.button}>Click</button>;

В CSS-in-JS (например, styled-components):

const Button = styled.button`
  background: blue;
`;

Здесь стили применяются только после выполнения JS.

Итог: CSS Module быстрее, особенно на слабых устройствах.

Ответ 18+ 🔞

А, ну это же классика, блядь! Слушай, сейчас разложу тебе по полочкам, почему CSS Module — это как здоровый немой Герасим, а CSS-in-JS — это болтливый барин, который всё время пиздит, но нихуя не делает быстро.

Вот смотри, в чём тут соль, ёпта.

Почему CSS Module — это ебать-колотить скорость? Потому что это просто, сука, обычный файл .css. Браузер его схватил, проглотил, применил — и всё, пиздец. Никаких тебе танцев с бубном. Как Герасим взял да утопил Муму — быстро, решительно, без лишних слов. Жестоко, зато эффективно.

А CSS-in-JS — это ёперный театр. Тут сначала должен JavaScript проснуться, потянуться, кофе выпить, а потом уже начать генерировать эти ваши стили. Пока он это делает, пользователь сидит и смотрит на голые, нестилизованные кнопки. Эта хуйня называется FOUC — Flash of Unstyled Content. По-нашему — «пиздец, у меня сайт голимый, блядь».

Пример, чтобы совсем понятно стало:

Вот как это выглядит у здорового мужика (CSS Module):

/* styles.module.css */
.button {
  background: blue;
  color: white;
  padding: 10px 20px;
}
// Component.js
import styles from './styles.module.css';
const Button = () => <button className={styles.button}>Нажми меня, ёпта</button>;

Файл стилей уже готов, браузер его сразу видит. Красота.

А вот как это у болтуна-стилизатора (styled-components):

const Button = styled.button`
  background: blue;
  color: white;
  padding: 10px 20px;
`;

Тут, блядь, пока React не отрендерит этот компонент, пока библиотека не сгенерирует из этой строки настоящие CSS-правила и не воткнёт их в <head> — пользователь будет пялиться на стандартную серую кнопку. Волнение ебать!

Итог, Колян: Если тебе нужна скорость, особенно на каком-нибудь древнем телефоне — бери CSS Module. Он как тот татарин-немой: молчит, но делает всё быстро и на совесть. CSS-in-JS — это, конечно, модно и гибко, но иногда за эту гибкость платишь скоростью. Выбирай, что для тебя важнее.