Summary from this group on CSS performance.
TLDR
CSS problems these days:
- Big bundles with multiple unused selectors which are still being analyzed by browsers in painting stage.
- CSS is performant when (numbers are provisional but based on analysis of Google):
- your page has max 2000 nodes
- CSS file is max 100kb unpacked
- Abstract-Syntax-Tree (AST) with nesting of nodes max 10
- Main problem is the search in the selector database, where more than 80% of the data is not used in any way. At the same time, the complexity of the selector language leads to complex chains of checking whether a particular selector is suitable for the current situation.
- Solutions (either ... or)
- use Block, Element, Modifier -> BEM like CSS systems
- minimize AST
More on BEM style: csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/
Good Example
<style>
.countDown {
width: 100%;
height: 100%;
display: block;
}
.countDown__text {
text-align: center;
font-size: 10vw;
line-height: 100vh;
}
.countDown__text_inform {
color: black;
}
</style>
<span class="countDown countDown__text countDown__text_inform">
Some text
</span>
POSTS
t.me/AsForJsTalks/101758
Современные проблемы CSS сосредоточены в двух вещах:
1) Большой обьем селекторов, которые никак не используются.
То есть общий бандл содержащий все стили всех возможных ситуаций всех частей проекта, содержит более 80% селекторов которые не используются, однако обьязательно принимают участие в анализе при формировании области отображения
2) Сам по себе язык CSS прекрасен, но только для случаев, когда у Вас страница содержит до 2000 узлов, и обьем вашего CSS файла не больше 100 килобайт в распокованном виде вместе с кодом страницы. (Цифры 2000 узлов и 100 килобайт - полуусловны. Они показывают порядок. То есть речь не идет о мегабайте)
Недостатки языка всплывают тогда, когда колличество узлов, а главное вложенность этих узлов превышает 10. (Цифры от гугла, они могут быть больше или меньше - для нас важна не конкретная цифра, а сам принцип вложенности)
Как следствие - проблемой становится сам по себе поиск по базе селкторов, где больше 80% данных никак не используются. При этом сложность языка селекторов заставляет создавать сложные цепочки проверки подходит тот или иной селектор к текущей ситуации.
Ответом на все это безобразие - стали решения подобные БЭМ. Которые фактически вводят правила, которые заставляют иметь CSS файл состоящий (в основном) из быза селекторов классов и только их. Никаких каскадов. И сведения к минимуму любых псевдоклассов.
То есть дефакто сейчас - если Вы хотите спать спокойно, то вы должны использовать всегда системы подобные БЭМ, которые приводят к тому, что описание отображение строиться не на особенностях самого каскада:.class {} .class .subClass {} .class .subClass .themeRed {} tag .class{}
но на самой его примитивной форме:
.class {} .class__subClass {} .class__subClass_themeRed {} .tag__class {}
тем самым нивелируя все недостатки описанные выше.
То есть, фактически, если вы работаете с проектом, у которого мегабайтные CSS файлы - нужно забыть о каскадах навсегда.
t.me/AsForJsTalks/151771
Про Google, SEO и CSS
В современных реалиях, CSS это прежде всего инструмент как для сокрытия информации от индексации, но при этом видимой пользователю, так и большая проблема производительности вашего проекта.
А производительность формирования первой области отображения - один из важнейших для Google показателей при ранжировании проекта.
CSS может сильно просадить производительность при условии:
1) Большого обьема подключенных селекторов, даже не используемых.
2)Использовании сложных каскадов, в том числе условий in и прочих.
Сложный каскад - это когда вы в УЖЕ в правиле CSS используется больше одного селектора:
> .class1 .class2 {
> color: red;
> }
> p .class2 {
> font-size: 14em;
> }
> #blockID .highLight {
> background-color: blue;
> }
ВСЕ эти селекторы и любые более сложные - пиздец производительности.
Безусловно имеет существенное значение уровень вложенности тегов.
Эффективным решением двух выше-обозначенных проблем, является:
Либо минимизация CSS дерева.
Либо использования что-то наподобие БЭМ. Где де факто исключены каскады.
Еще раз подчеркну - это касается больших обьемов CSS правил.
Ну чтобы было понятно, условно - 1МБ в несжатом виде уже стоит серьезно задуматься.
Top comments (0)