В интерфейсной разработке термин «компонент» имеет разные значения в зависимости от контекста.
Веб-компоненты — это стандартные веб-технологии, которые позволяют создавать повторно используемые и автономные HTML-элементы. Они включают:
Веб-компоненты можно использовать в любом фреймворке или без него, что делает их универсальными.
Компоненты фреймворка, с другой стороны, создаются для конкретного фреймворка, такого как React, Angular или Vue. Они предлагают:
Критики утверждают, что веб-компоненты не всегда соответствуют ожиданиям из-за их независимости от фреймворков, что может влиять на производительность и совместимость. Однако, они предлагают гибкость и возможность использования в различных проектах без привязки к конкретной библиотеке.
В статье рассматриваются аргументы за и против использования веб-компонентов и компонентов фреймворка, а также анализируются аспекты их производительности и универсальности.
Чтобы фрагмент кода считался компонентом, он должен соответствовать нескольким ключевым критериям:
Авторы уверены, что компоненты фреймворков хорошо соответствуют этим критериям. Но как обстоят дела с их аналогами — веб-компонентами?
Веб-компоненты — это набор веб-интерфейсов API, позволяющий разработчикам создавать пользовательские, повторно используемые HTML-теги с определённой функциональностью. Они основаны на существующих веб-стандартах и позволяют расширять HTML новыми элементами, настраиваемым поведением и инкапсулированным стилем.
Веб-компоненты строятся на основе трёх спецификаций:
Каждая спецификация может использоваться отдельно, но их комбинация создаёт мощные и гибкие веб-компоненты.
Пользовательский элемент
API пользовательских элементов предоставляет возможность определять и использовать новые типы DOM-элементов, которые можно использовать повторно.
// Define a Custom Element
class MyCustomElement extends HTMLElement {
constructor() {
super();
}
connectedCallback() {
this.innerHTML = "<p>Hello from MyCustomElement!</p>";
}
}
// Register the Custom Element
customElements.define('my-custom-element', MyCustomElement);
Теневой DOM
Теневой DOM существовал задолго до появления концепции веб-компонентов. Браузеры давно используют его для элементов управления, таких как кнопки и выпадающие списки, которые не являются обычными узлами DOM. Это часть DOM, которая менее доступна для JavaScript и CSS, чем обычные элементы (light DOM). Теневой DOM обеспечивает более высокую степень инкапсуляции, защищая стили и структуру компонента от внешних воздействий.
HTML-шаблоны
API HTML-шаблонов позволяет разработчикам создавать шаблоны разметки, которые не загружаются при старте приложения, но могут быть активированы во время выполнения с помощью JavaScript. HTML-шаблоны определяют структуру пользовательских элементов в веб-компонентах, обеспечивая гибкость и возможность повторного использования.
// my-component.js
export class MyComponent extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
this.shadowRoot.innerHTML = `
<style>
p {
color: red;
}
</style>
<p>Hello from ES Module!</p>
`;
}
}
// Register the Custom Element
customElements.define('my-component', MyComponent);
<!-- Import the ES Module -->
<script type="module">
import { MyComponent } from './my-component.js';
</script>
Веб-компоненты часто называют независимыми от фреймворка, так как они используют стандартные API браузера и не привязаны к конкретным библиотекам или фреймворкам JavaScript. Это позволяет использовать их в любом веб-приложении, будь то на React, Angular, Vue или даже на чистом JavaScript. Благодаря своей независимости, веб-компоненты можно интегрировать в любой современный интерфейсный фреймворк с минимальными изменениями.
Фреймворк-агностицизм описывает программное обеспечение, которое можно интегрировать в любой фреймворк с минимальными изменениями и при этом сохранить его функциональность. Веб-компоненты стремятся к этому, но их интеграция может потребовать изменений, особенно в стилях и структуре HTML. Также могут понадобиться дополнительные настройки или полифиллы для обеспечения поддержки всеми браузерами.
Эти особенности вызывают сомнения у некоторых разработчиков относительно полной независимости веб-компонентов от фреймворков. Тем не менее, несмотря на необходимость конфигураций, веб-компоненты могут быть успешно интегрированы в различные интерфейсные фреймворки, такие как React, Angular и Vue, и даже за их пределами.
Компоненты фреймворка — это повторно используемые фрагменты кода, предназначенные для конкретной платформы. Они являются строительными блоками фреймворка и обладают рядом преимуществ перед веб-компонентами:
Примеры популярных компонентов фреймворков:
Компоненты фреймворков, такие как React, Vue и Angular, работают в рамках своей среды, используя специфические для них технологии и соглашения. Например, React использует JSX, а Angular — собственный синтаксис шаблонов.
Ограничения:
Таким образом, выбор между веб-компонентами и компонентами фреймворка зависит от конкретных требований проекта и предпочтений команды разработчиков.
Инкапсуляция и стилизация
Инкапсуляция — ключевая характеристика компонентов, но веб-компоненты и компоненты фреймворка реализуют её по-разному.
Возможность повторного использования и взаимодействие
Соображения производительности
При выборе между веб-компонентами и компонентами фреймворка производительность играет ключевую роль. Оба подхода могут быть эффективными, но в некоторых случаях один из них может превосходить другой.
Опыт разработчика играет важную роль при выборе между веб-компонентами и компонентами фреймворка. Простота использования и уровень обучаемости могут существенно влиять на время разработки и управляемость проекта.
Преимущества веб-компонентов | Преимущества компонентов фреймворка |
---|---|
Использование стандартного API браузера может привести к эффективному рендерингу и снижению накладных расходов. | Такие платформы, как React и Angular, предоставляют специальные возможности оптимизации (например, виртуальный DOM, обнаружение изменений), которые могут повысить производительность больших динамичных приложений. |
Меньший размер пакета и поддержка встроенного браузера могут ускорить загрузку. | Фреймворки часто предоставляют инструменты для оптимизации размеров пакетов и отложенной загрузки компонентов. |
Используйте собственные API-интерфейсы браузера, делая их доступными для разработчиков, знакомых с HTML, CSS и JavaScript. | Обширная документация, которая облегчает работу разработчикам. |
Использование стандартного API браузера означает меньшее количество зависимостей и возможность повышения производительности. | Богатая экосистема с обширным набором инструментов, библиотеками и поддержкой сообщества. |
Недостатки веб-компонентов | Недостатки компонентов фреймворка |
---|---|
В старых браузерах может потребоваться многоразовое заполнение, что может увеличить время начальной загрузки. | Компоненты, зависящие от фреймворка, могут создавать дополнительные накладные расходы из-за среды выполнения фреймворка и дополнительных библиотек. |
Более крутая кривая обучения благодаря дополнительным концепциям, таким как Shadow DOM и пользовательские элементы. | Требуется знакомство с соглашениями и API-интерфейсами фреймворка. |
Меньшая экосистема и меньше документации от сообщества по сравнению с популярными фреймворками. | Привязан к фреймворку, что затрудняет переход на другой фреймворк. |
Выбор между веб-компонентами и компонентами фреймворка зависит от конкретных потребностей вашего проекта или команды. Важно учитывать такие факторы, как возможность повторного использования, производительность и опыт разработчиков.
Веб-компоненты представляют собой новый стандарт для создания независимых, совместимых и повторно используемых компонентов. Хотя они требуют доработки и адаптации для соответствия стандартам компонентов фреймворков, они заслуженно называются «компонентами».
В ходе сравнительного анализа мы рассмотрели сильные и слабые стороны веб-компонентов и компонентов фреймворков, выявив их ключевые различия. Также были предложены полезные подходы для интеграции веб-компонентов в интерфейсные фреймворки, что может быть полезно для тех, кто рассматривает такой подход.
Источник: www.smashingmagazine.com
Я даю согласие OOO «ЭсБилдер» (далее «BINN») на обработку моих персональных данных в соответствии со статьями 6, 9, 10, 18 Федерального закона от 27 июля 2006 года № 152-ФЗ «О персональных данных», указанных в онлайн-форме и/или предоставленных мною с целью:
Способы обработки персональных данных могут быть любыми, включая сбор, систематизацию, накопление, хранение, уточнение, обновление, изменение, воспроизведение, обезличивание, блокирование и уничтожение.
Настоящее согласие применяется в отношении обработки следующих данных: имя, номер телефона, адрес электронной почты (E-mail).
Настоящее согласие предоставляется сроком на пять лет. По истечении указанного срока действие согласия считается продленным на каждые следующие пять лет при отсутствии сведений о его отзыве.
Согласие может быть отозвано мною в любой момент путем направления в BINN подписанного мною письменного заявления.