September 8, 2021

Зачем использовать веб-компоненты?

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

Зачем использовать веб-компоненты?

JavaScript-фреймворки предлагают множество преимуществ:

  • Экономия энергии. Современные JavaScript фреймворки наполнены лучшими практиками, инструментами, парадигмами и отраслевыми стандартами, что позволяет нам создавать и публиковать приложения в кратчайшие сроки. Это позволяет разработчикам сосредоточиться на фактической разработке, а не на инструментах и архитектуре.
  • Многократно используемый код. Компоненты, созданные с помощью JavaScript-фреймворка, взаимозаменяемы (в рамках приложений, использующих тот же фреймворк), поэтому командам не приходится дважды изобретать велосипед.
  • Общий язык для всех. Использование JavaScript-фреймворка создает общее понимание между разработчиками. Все "говорят" на одном и том же общем языке и находятся на одной странице.

Неудивительно, что почти каждое приложение JavaScript построено с использованием (современного) фреймворка или библиотеки JavaScript, так почему же мы должны использовать веб-компоненты вместо того, чтобы использовать наш любимый фреймворк? Какие проблемы решает использование "родной" компонентной модели?

Согласованность

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

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

Удобство обслуживания

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

Веб-компоненты могут поддерживаться одним разработчиком (или командой) и предоставляться другим. Разработчики заботятся о компонентах, а пользователи могут автоматически получать обновления (например, с помощью npm) и продолжать свою работу, не опасаясь окунуться в ад сопровождения.

Многоразовость

Будьте проще, глупее и не повторяйтесь (Keep It Simple Stupid, и Don't Repeat Yourself) - это мантры, которые мы постоянно повторяем, и которые являются ключевой частью создания понятных, поддерживаемых и многократно используемых приложений. Это одна из самых сложных задач в веб-разработке. С помощью веб-компонентов мы решаем эту проблему, определяя разметку на JavaScript. В дальнейшем разработчик может свободно изменять HTML, CSS и JavaScript, а пользователь может воспользоваться изменениями автоматически, без необходимости обновлять код вручную.

Операционная совместимость

JavaScript-фреймворки, такие как Angular, React и VueJs - это потрясающе! В них собраны лучшие практики, инструменты для создания конструкторов, парадигмы и промышленные стандарты, которые позволяют нам создавать и публиковать приложения в кратчайшие сроки, но они не очень совместимы - они не очень хорошо взаимодействуют друг с другом. Это происходит потому, что все они имеют различные, не взаимозаменяемые модели компонентов. Конечно есть так называемые микрофронтенды, однако есть более "правильный" подход.

Веб-компоненты полностью основаны на веб-стандартах и совместимы с любой библиотекой JavaScript или фреймворком (или без них). Это означает, что они полностью совместимы между фреймворками и приложениями. Теперь становится возможным поддерживать несколько приложений с компонентами пользовательского интерфейса из одной базы данных.

Читабельность

Самая важная аудитория для нашего кода - это люди (мы сами и другие разработчики и пользователи), поскольку именно мы будем делать или разбирать программу в будущем. К сожалению, код не всегда хорош и многие HTML-страницы оказываются в невыразительном и нечитаемом виде из <div/>, как, например, страница Gmail от Google:

Веб-компоненты позволяют нам организовать весь этот суп из <div/> в понятный, читабельный, семантически дружественный код, создавая пользовательские элементы там, где мы считаем нужным. Вот пример того, как это будет выглядеть:

<google-mail>
  <mail-list>
    <mail-item from="[email protected]">
      <h2>Hello World</h2>
      <article>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
      </article>
    </mail-item>
  </mail-list>
</google-mail>

Полная инкапсуляция

Теневой DOM позволяет веб-браузерам изолировать фрагменты DOM. Это означает, что нам не нужно беспокоиться об утечке стилей и логики в наши веб-компоненты и из них. Другими словами: Они полностью инкапсулированы.

Веб-компоненты прекрасно совместимы с любыми библиотеками JavaScript.

Как уже упоминалось в первой статье, поддержка веб-компонентов со стороны фреймворков и библиотек JavaScript превосходна и постоянно растет! Веб-компоненты можно использовать с:

  • Angular
  • AngularJs
  • React
  • Vue.js
  • Svelte
  • Vanilla JavaScript

Развенчание мифов о веб-компонентах

Почему не стоит использовать веб-компоненты? Существует множество мифов о том, почему не стоит использовать веб-компоненты. Основная причина заключается в том, что они построены на развивающихся веб-стандартах, которые имеют свои недостатки и ограничения. Я знаю несколько мифов, и теперь пришло время развеять их!

МИФ №1. Веб-компоненты не могут быть отрендерены на стороне сервера (SRR)

Неправда! Поскольку веб-компоненты основаны на веб-стандартах, их можно прекрасно рендерить на стороне сервера. Это может быть трудно сделать, если вы создаете решение с нуля, но такие библиотеки, как SkateJs и Stencil, сделают всю тяжелую работу за вас.

МИФ №2. Веб-компоненты недоступны (a11y)

Неправда! Основная причина, по которой люди думают, что веб-компоненты недоступны, заключается в том, что содержимое HTML включено в теневой DOM, а не в основной DOM, но на самом деле это совершенно не влияет на доступность! Информация a11y корректно отображается через API доступности, и экранные считыватели могут получить доступ к содержимому в теневом DOM без каких-либо трудностей.

МИФ №3. Веб-компоненты не готовы к использованию в коммерческих целях

Неправда! Люди считают, что поскольку веб-компоненты построены на развивающихся веб-стандартах, они не готовы к производству, но это неправда! Все стандарты W3 постоянно развиваются, а это значит, что ни одна технология никогда не будет готова к производству, что является бессмыслицей.

Кроме того, Apple, Salesforce и GitHub используют веб-компоненты в производстве. Вам нужны еще доказательства?

Заключение

Хотя фреймворки и библиотеки JavaScript предлагают разработчикам множество преимуществ, у них есть и свои недостатки, и именно здесь веб-компоненты могут отлично заполнить пробел. Основанные на веб-стандартах, веб-компоненты идеально подходят для обеспечения согласованности, являются обслуживаемыми, многократно используемыми, совместимыми и читаемыми. Они также полностью совместимы с (или без) любым фреймворком/библиотекой JavaScript и обеспечивают полную инкапсуляцию.

Многие мифы создают негативное представление о веб-компонентах и о том, почему люди не используют их, но большинство из них развеяны, и ничто не мешает вам использовать их в полную силу!

Источник: https://dev.to/stefannieuwenhuis/web-components-101-why-use-web-components-3me5