Веб-компоненты и открытые стандарты

fr6eqqukztgu8anqfi7ycl5f1_o.png

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


  • Это веб-стандарт, сделанный открытым сообществом, а не какой-то частной компанией
  • Веб-стандарты не ломают обратную совместимость, не придется переживать за свой код в будущем
  • Все современные браузеры придерживаются стандарта в своем поведении, меньше сюрпризов на кросс-браузерном тестировании

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


Открытый стандарт

Открытость стандарта подразумевает то, что он написан с привлечением разных заинтересованных сторон. В результате получается удовлетворяющий всех результат. Что же произошло в этом случае? Открываем документ и видим его авторов


  • Dimitri Glazkov, Google
  • Hayato Ito, Google
  • Dominic Cooney, Google

Все они работают Гугле. Аналогичная ситуация и в истории коммитов в этот репозиторий. Попробуйте на графике контрибьюторов найти человека не из Гугла. В первой пятерке таких точно нет.

Получается, что этот стандарт написан почти на 100% в Гугле. Но, может быть, у сообщества была возможность высказать свои пожелания и они были услышаны? Давайте рассмотрим несколько примеров.


Глобальный регистр компонентов

Избегание глобальных сущностей является одним из важных аспектов дизайна масштабируемых систем. На эти грабли веб-разработка уже наступала в CSS, где любой класс применяется глобально ко всей странице. Веб-компоненты попытались починить это через Shadow DOM, но тут же сломали в другом месте, добавив глобальный регистр компонентов. Каждый компонент должен иметь уникальное имя, а если встретится дубликат, то выбросится исключение, и весь Javascript перестанет работать, если его не завернуть в try/catch.

Эту проблему зарепортил пользователь, но один из авторов стандарта ответил что проблемы никакой нет и закрыл тикет.

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

Таким образом, спустя 6 лет после первоначальной публикации стандарта, мы все еще имеем проблему, которая должна была бы выявиться еще на первоначальном ревью. Хотя какое тут ревью, сотрудникам Гугла виднее, как именно нам будет хорошо.


Расширение нативных элементов

Возможно, Гугл игнорирует пожелания рядовых разработчиков, но прислушивается к разработчикам других браузерных движков? Они же все на общее дело работают. Но здесь тоже не все гладко.

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