FAST Element — это библиотека для создания
веб-компонентов с высокой производительностью и полной поддержкой
реактивности. Компоненты строятся на основе класса
FASTElement, который расширяет стандартный
HTMLElement. Основные свойства включают: шаблон
(template), стили (styles) и реактивные
свойства (@attr и @observable).
Пример минимального компонента:
import { FASTElement, html, css, customElement } from '@microsoft/fast-element';
const template = html`
${x => x.message}
`;
const styles = css`
.container {
padding: 10px;
border: 1px solid #ccc;
}
`;
@customElement({ name: 'my-element', template, styles })
class MyElement extends FASTElement {
message = 'Привет, FAST!';
}
Ключевые моменты:
template описывает HTML-разметку с реактивными
биндингами.styles задают локальные стили, применяемые только к
компоненту.FAST Element поддерживает два типа реактивных данных: атрибуты и наблюдаемые свойства.
@attr связывает свойство с HTML-атрибутом,
автоматически синхронизируя изменения.@observable делает свойство реактивным внутри
компонента, без привязки к атрибуту.Пример:
import { FASTElement, observable, attr } from '@microsoft/fast-element';
class UserCard extends FASTElement {
@attr username;
@observable age;
}
Изменение username через DOM
сразу
обновляет свойство username в компоненте. Изменение
age через код компонента отразится только в шаблоне.
Важно: Использование реактивных свойств снижает количество ручных обновлений DOM, что ускоряет работу бандла и уменьшает его вес.
FAST Element поддерживает вложенные компоненты и слоты
(), что облегчает модульную структуру
бандла.
Пример:
const parentTemplate = html`
`;
FAST Element по умолчанию использует Shadow DOM, изолируя стили компонента.
Пример динамических стилей:
const styles = css`
:host {
display: block;
--main-color: blue;
}
p {
color: var(--main-color);
}
`;
Использование Shadow DOM влияет на размер бандла, так как все CSS включается локально в каждый компонент.
Для уменьшения веса бандла и ускорения загрузки можно использовать динамический импорт компонентов:
async function loadComponent() {
const module = await import('./my-element.js');
customElements.define('my-element', module.MyElement);
}
Преимущества:
При анализе бандла важно учитывать, какие компоненты загружаются динамически, чтобы оценить общий вес и критические пути.
FAST Element минимизирует обновления DOM с помощью минимальных наблюдений за изменениями.
@observable без привязки к DOM снижает
лишние вычисления.Пример мемоизации:
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
Если fullName используется в шаблоне, FAST Element
обновит только связанные элементы при изменении firstName
или lastName, без пересоздания всего DOM.
При работе с FAST Element важные метрики бандла включают:
Инструменты анализа:
webpack-bundle-analyzer — визуализация размера
модулей.Rollup с плагинами tree-shaking — удаление
неиспользуемого кода.Практическая рекомендация: Каждое подключение
компонента через customElement учитывается в бандле
отдельно. Использование наследования и миксинов помогает
переиспользовать код без дублирования.
FAST Element легко комбинируется с другими инструментами:
Эффективная интеграция снижает повторное подключение библиотек, что уменьшает вес бандла и ускоряет рендеринг.