При сборке для производства везде заменяйте CSS-классы (css, html / twig, javascript) - PullRequest
0 голосов
/ 25 апреля 2019

Я планирую использовать соглашение об именовании BEM в моем следующем проекте, но я немного беспокоюсь о производительности из-за длинных имен классов.

Взять, к примеру (источник здесь ):

<figure class="photo">
  <img class="photo__img photo__img--framed" src="me.jpg">
  <figcaption class="photo__caption photo__caption--large">Look at me!</figcaption>
</figure>

В сложном проекте с десятками файлов sass разница может быть не пренебрежимо мала.

Я работаю с Symfony 4, и мне интересно, есть ли элегантный способ заменить все классы css как в выходных данных css, так и в шаблонах веточек легкими именами, такими как a, b, c, ..., aa, ab и т. Д.

Вывод JavaScript также может быть рассмотрен, поскольку он может динамически добавлять классы css к определенным элементам.

Что касается части css, я думаю, что плагина Webpack, выполняющего глобальные замены в конечном выводе, может быть достаточно.

Что касается JavaScript, я думаю, что это почти невозможно сделать правильно, потому что имена классов могут генерироваться динамически (var className = "--is-" + this.state;) или, что еще хуже, возвращаться с сервера или любым другим причудливым способом, который вы можете себе представить.

Поэтому я подумал о добавлении префикса к классам, которые не должны заменяться. Как начать их с _.

Но html-часть (или, я бы сказал, часть twig) сложнее решить, поскольку ее нельзя игнорировать, как в части Javascript, и нет преобразования между кодом, написанным в разработке, и кодом, используемым в производстве .

Я полагаю, что twig компилирует все в php при построении кеша, так что, возможно, есть что-то, что можно сделать с помощью перехватчиков компиляции, или что-то еще в этой области.

Знаете ли вы какие-либо инструменты, которые делают подобные вещи?

Как крупные сайты справляются с этим? Например, если я открываю инспектора в службе Google, я вижу такие вещи:

<button class="GBTG6V-f-a GBTG6V-f-l GBTG6V-f-p GBTG6V-f-g" [...]>

Мне не очень дружелюбно.

Спасибо за ваши идеи.

...