Мы очень рады анонсировать новую пятую версию styled-components! Новая версия полностью обратно совместима с предыдущей при условии использования React^16.8.


Бету пятой версии можно попробовать уже сейчас:


npm install styled-components@beta

Нужна версия React, поддерживающая React.hooks, т.е. react@^16.8 react-dom@^16.8 react-is@^16.8


А теперь об изменениях!


Быстро. Еще Быстрее. Styled-Components.


Когда больше чем 2 года назад мы выпустили вторую версию, мы обещали фокусироваться на производительности. Мы уже сильно ускорили работу библиотеки в течение нескольких релизов. Так, мы получили десятикратное увеличение скорости в версии 3.1 и еще 25% ускорение в версии 4.


К пятой версии, библиотека styled-components стала еще быстрее! Сравнивая с 4 версией, мы получили:


  • на 19% меньший размер минифицированного кода (16.2kB vs. 13.63kB min+gzip) ?
  • на 18% быстрее инициализация на клиентской стороне
  • на 17% быстрее обновление динамических стилей
  • на 45% (!!!) быстрее серверный рендеринг

Styled-components и так уже была одной из самых быстрых CSS-in-JS библиотек, но теперь она еще быстрее, но с пятой версии мы укрепили свою позицию в лидерах:



Инициализация дерева компонентов. Меньше — лучше.


Значительный прирост скорости был достигнут благодаря нашему новому ядру. Оно не подвергалось изменениям годами, так что мы полностью переписали его с фокусом на производительность и точность (корректность).


Несмотря на широкое внутреннее тестирование, все еще могут быть некоторые баги, которые мы обязательно исправим. Мы также просим помощь сообщества в тестировании бета-версии, чтобы релиз был максимально стабильным.


Попробуйте библиотеку и расскажите, если вдруг что-то пошло не так:


npm install styled-components@beta

Если вы используете jest-styled-components, убедитесь, что вы обновили эту библиотеку до беты.


Наглядно. Еще нагляднее. React DevTools


Теперь все ваши стилизованные компоненты полностью работают на React.hooks, так что древовидная структура куда более наглядная и простая.


Например, стилизованный компонент TagLine выглядит в React DevTools до изменений (v4):


<TagLine>
  <StyledComponent forwardedRef={null}>
    <Context.Consumer>
      <Context.Consumer>
        <h2 className=”H2-sc-1izft7s-7”>Hello world</h2>
      </Context.Consumer>
    </Context.Consumer>
  </StyledComponent>
</TagLine>

А вот так — после изменений (v5)


<TagLine>
  <h2 className=”H2-sc-1izft7s-7”>Hello world</h2>
</TagLine>

Достаточно наглядно? А вот пример из реального приложения:
Сравнение дерева React-компонентов в v4 и v5
Дерево компонентов в React DevTools для сайта styled-components.com. Слева четвертая версия, справа — пятая. Wow! (Кликабельно)


Огромный привет Джессике Франко и Александру Нанбергу за то, что они отрефакторили код, используя React.Hooks.


Новый. Еще новее. StyleSheetManager


<StyleSheetManager /> получил значительное обновление в пятой версии, позволяя расширять плагинами наш CSS-парсер (stylis).


Это можно использовать для различных сценариев, например для полной и автоматической поддежки Right-To-Left.


RTL support


С помощью такого плагина вы можете легко заменить напрвление "слева-направо" на "справа-налево":


import { StyleSheetManager } from 'styled-components';
import stylisRTLPlugin from 'stylis-rtl';
<StyleSheetManager stylisPlugins={[stylisRTLPlugin]}>
  <App />
</StyleSheetManager>

Это все, что нужно сделать! Мы очень рады и удивлены тем возможностям, которые открываются с плагинами. Теперь можно дать стилизованным компонентам суперсилу!


Поддержите нас


styled-components широко используются сообществом. Очень широко. Библиотека была скачана 39 миллионов раз и является зависимостью для сотен тысяч публичных репозиториев, не включая множество приватных, которые не показываются в статистике GitHub.


Так как библиотека используется широко мы, команда ядра, берем серьзную ответственность на себя. К сожалению, обслуживание и поддержка библиотеки практически полностью волюнтеризирована. И мы очень ограничены в ресурсах, чтобы платить кому-нибудь, чтобы организировать или участвовать в конференциях и саммитах.


Если вы используете библиотеку на работе, пожалуйста рассмотрите возможность поддержки нас на OpenCollective. Мы бы очень хотели собрать нашу команду в одном помещении в этом году, и эта поддержка поможет нам осуществить задуманное.


Вся команда надеется, что вам понравится пятая версия. И, как всегда, оставайтесь стильными !

Комментарии (8)


  1. comerc
    17.06.2019 23:43

    Styled-components и так уже была одной из самых быстрых CSS-in-JS библиотек, но теперь мы еще быстрее

    Внезапно, reshadow benchmarks


    1. JustDont
      18.06.2019 11:13

      Звучит как мантра, ага. Я не знаю, как можно писать про «одну из самых быстрых», когда получить тормоза c styled-components всегда можно было на совершенно даже реалистичных количествах элементов (что оно 100 разных дивов у вас в бенчмарке рисует за 4 с лишним секунды — оно вот очень показательно).


      1. Carduelis Автор
        18.06.2019 12:10

        Глянул пример — там используется какой-то сюр. Использование & > & селекторов априори будет медленным. Про это написано во всех подобных библиотеках. На практике, в продакшене, такое используется крайне редко. А когда используется, обычно это касается одного вложения, а не динамического.


        Подобные селекторы, по факту, ломают весь подход модульности и отсутствия явных зависимостей, который был в свое время выведен в принципах БЭМ.


        Так что этот бенчмарк исключительно для того, чтобы кинуть огород в данный подход.


        1. JustDont
          18.06.2019 12:17

          Использование & > & селекторов априори будет медленным.

          Если это правило выкосить, то styled-components продолжает давать самые плохие по скорости результаты из представленных 4х либ. Даже если в других 3х либах его не убирать.

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


    1. skyline405
      18.06.2019 12:10

      Забавные результаты получаются.

      Для тех, кому лень (все значения в ms):

      Тест по 100 элементов
      emotion
      1. 559.8350
      2. 1032.8100
      3. 1398.5800
      4. 1802.5850
      5. 20314.7800

      reshadow
      1. 127.0800
      2. 94.9450
      3. 91.5700
      4. 165.0350
      5. 87.8300

      styled-components
      1. 4440.0950
      2. 11411.1450
      3. 19085.5300
      4. 26732.8200
      5. 34924.7750

      styled-jss
      1. 219.4550
      2. 130.5550
      3. 114.9750
      4. 109.5250
      5. 116.9450


      1. Carduelis Автор
        18.06.2019 12:13

        Повторюсь, это сферические в вакууме примеры тестирования самого слабого места этих (да и любых подобных) библиотек. Это вот подобные селекторы: & > & или & > div.


        Во-первых, все пишут в своих документациях об осторожном их использовании, так как это влияет на производительность.


        Во-вторых, это не про модульность и отсутствие сайд-эффектов. Нельзя писать такое в продакшене, так как этот дочерний каскадный стиль будет влиять на другие компоненты самым нежелательным образом.


        Так, что, это как выстрелить себе в ногу. Можно, но совершенно не нужно.


  1. comerc
    18.06.2019 21:56

    Автор reshadow максимально отзывчивый. К тому же это отечественный производитель. Очень надеюсь, что вывезет. Я лично вступил в ряды ранних последователей. Посмотрите, какая многообещающая презентация.


    1. Carduelis Автор
      20.06.2019 11:37

      Напишите что-нибудь о ней!
      Я заметил, что в библиотеке используются css-переменные, что довольно-таки интересно в мире non-ie11.