1. 17. 10. Плюсы и минусы БЭМ

Плюсов в БЭМ больше, с них и начнём.

Плюсы

  • Простота — низкий порог вхождения в технологию, даже новичок может использовать БЭМ в своём проекте.

  • Гибкость — БЭМ-сущности формируются под нужды и специфику проекта. Нет чётких правил, что одни сущности отвечают только за сетки, а другие — только за темы (можно сравнить со SMACSS).

  • Независимость — компоненты создаются так, чтобы их можно было легко переносить из проекта в проект без каких-либо доработок.

  • Командная разработка интерфейса — монолит макета делится на независимые блоки, которые разрабатываются отдельными участниками команды, возможна параллельная работа, кто-то собирает эти блоки вместе.

  • Лучшая производительность — из-за того, что БЭМ не использует вложенные селекторы, браузеры быстрее вычисляют специфичность селекторов и быстрее обрабатывают правило. Правда некоторые источники утверждают, что современные движки браузеров достаточно эффективны, и практически во всех сложных случаях (за исключением разве что самых экстремальных) выигрыш в скорости пренебрежительно мал.

  • Понятность (человекочитаемость) — вопрос больших проектов, структура проекта прозрачна, всё что относится к блоку/компоненту собрано внутри одной папки. Простые селекторы помогают быстрее понять ваш код другим разработчикам и вам по прошествии некоторого промежутка времени.

  • Меньше конфликтов при определении стилей для элемента — имена классов уникальные и не повторяются. Перебивать вес селекторов не нужно. Как правило, достаточно сделать модификатор (возможно, придётся использовать флаг !important только для внешних библиотек, чтобы перебить правило, которое мы не имеем права переписывать).

  • Расширяемость — официальную документацию по БЭМу каждая команда может расширить своими мыслями и опытом набитых шишек. Хотя это уже не совсем БЭМ, а какой-то расширенный вариант БЭМ для вашей команды/компании.

А ещё БЭМ помогает новичкам сформировать компонентное мышление. Это облегчает расширяемость проекта, ведь все компоненты независимы, любой из них легко изменить, и эти изменения не затронут другие компоненты. А значит, меньше шансов что-либо сломать.

Минусы

  • Увеличение объёма файлов со стилями (каждый DOM-узел с классом, плюс длинные названия классов и несколько классов для одного узла, возможно, дублирование стилей). Проблему можно решить за счёт минификации итоговых файлов со стилями и добавлением в сборку только нужных файлов.

  • «Страшный» HTML-код (в разметке появляется куча классов). В исходный код страницы с разметкой пользователи заглядывают редко. Так что если вы раздумываете, использовать или не использовать БЭМ, то этот пункт вряд ли будет решающим.

  • Сложности при реализации. В стилях каждый компонент — это отдельный файл (в CSS есть директива @import), а вот писать компонентно на «ванильном» HTML — это проблема. Пока что, к сожалению, нет подходящих инструментов для сборки. В таком процессе разработки тяжело сделать декомпозицию.

Last updated