CSS-в-JS
CSS-in-JS — это поток, который начинается со стилевых компонентов и определяет стиль в Javascript.
styled-компонент, Emotion, Mantine и т. д.
заслуга
- Область применения невелика.
- Если вы используете модуль CSS, вы также можете уменьшить область применения CSS
- Определяется там же, где и компонент. (колокейшн)
- Можно использовать переменную Javascript.
недостаток
- Издержки времени выполнения
- Вам необходимо загрузить файл библиотеки Css in JS.
- Emotion — 7,9 КБ.
- Мантин — 134 КБ!
огромный недостаток
- Частая вставка правил CSS требует большого объема вычислительной работы.
- Сравнение Emotion и CSS
- При использовании CSS производительность увеличилась примерно на 50%.
- При использовании SSR возникает множество проблем.
- Если вы посмотрите на репозиторий Emotion, там много проблем.
Сравнение производительности в реальном мире
Мы измеряли производительность, сравнивая CSS-in-JS и Tailwind с использованием кода, фактически используемого в производстве.
Настраивать
- CSS-in-JS использует Mantine (на основе Emotion).
- Для измерения производительности используется инструмент разработки React.
- Целью измерения производительности является таблица размером 30 * 5 (имя компонента: SheetTable).
экран
Ход эксперимента
Когда вы нажимаете кнопку - , отображается приведенный выше экран
.
- Включите запись в React Profiler и нажмите кнопку, чтобы записать рендеринг экрана
- Измеряет время рендеринга SheetTable.
- Выполните всего 5 раз, чтобы получить среднее значение.
CSS-в-JS (Мантин)
Попутный ветер
результат
- Время рендеринга сократилось примерно на 36%.
- Даже изменив всего лишь один код ячейки, производительность значительно улучшилась. (Конечно, большинство из них — клетки)
- На мониторе с частотой 60 Гц 1 кадр составляет 16 мс, но 3 кадра -> 2 кадра
заключение
- Использование статически сгенерированного CSS значительно повышает производительность.
- Если вам не нужно использовать переменные JS, используйте Tailwind.
- (Дополнительно) Чтобы внедрить SSR, удобно отказаться от CSS-in-JS
Ссылка
[1] https://dev.to/srmagura/why-were-breaking-up-wiht-css-in-js-4g9b