Изоморфный код

FAST Element — это библиотека для создания веб-компонентов на основе стандартов Custom Elements с акцентом на производительность, реактивность и удобство работы с шаблонами. В отличие от обычных подходов к веб-компонентам, FAST Element предоставляет декларативный синтаксис для связывания данных с шаблонами и мощный механизм реактивных свойств.

Ключевые моменты:

  • Custom Elements: FAST Element расширяет стандартные возможности веб-компонентов, позволяя объявлять элементы через FASTElement.define.
  • Шаблоны: Используется html тэг-функция для декларативного описания структуры DOM.
  • Реактивные свойства: Любое свойство элемента может быть реактивным, автоматически вызывая обновление DOM при изменении значения.
import { FASTElement, html, css } from "@microsoft/fast-element";

const template = html`
  
${x => x.message}
`; const styles = css` div { color: blue; } `; class MyElement extends FASTElement { message = "Привет, FAST!"; } MyElement.define({ name: "my-element", template, styles });

Реактивность и привязка данных

FAST Element поддерживает несколько типов привязок данных:

  • Односторонняя привязка (x => x.prop) — данные текут от свойства элемента в шаблон.
  • Двусторонняя привязка (:prop) — синхронизация данных между DOM и свойствами элемента.
  • Событийная привязка (@event) — обработка событий напрямую в шаблоне.
const template = html`
  
  

Привет, ${x => x.name}

`;

Каждое изменение свойства name автоматически обновляет текст в параграфе, обеспечивая реактивное поведение без необходимости ручного манипулирования DOM.


Стилизация и CSS-шаблоны

FAST Element интегрирует CSS напрямую в компоненты через объект css. Стили являются изолированными для компонента и поддерживают переменные CSS:

const styles = css`
  :host {
    display: block;
    font-family: sans-serif;
    --main-color: red;
  }
  div {
    color: var(--main-color);
  }
`;
  • :host определяет стили для самого элемента.
  • Переменные CSS позволяют легко настраивать темы и переиспользовать стили.

Изоморфный код и SSR

Изоморфный подход предполагает использование одного и того же кода на клиенте и сервере. FAST Element поддерживает серверный рендеринг (SSR) через генерацию статических HTML-шаблонов с последующей гидратацией на клиенте.

Основные принципы изоморфного рендеринга в FAST:

  1. Шаблоны должны быть чистыми функциями — без прямых зависимостей от DOM.
  2. Реактивные свойства могут быть сериализованы — сервер отправляет готовый HTML, клиент связывает свойства с шаблоном.
  3. Hydrate вместо полного рендера — FAST использует гидратацию для минимизации перерисовки.
import { FASTElement, html } from "@microsoft/fast-element";
import { renderToString } from "@microsoft/fast-server-renderer";

const template = html`
${x => x.message}
`; class MyElement extends FASTElement { message = "Изоморфный FAST!"; } // Серверный рендеринг const htmlString = renderToString(template, new MyElement());

На клиенте FAST автоматически связывает реактивные свойства с DOM без повторного построения элементов.


Слоты и композиция

FAST Element поддерживает слоты для гибкой композиции компонентов:

const template = html`
  
`; class LayoutElement extends FASTElement {} LayoutElement.define({ name: "layout-element", template });
  • Основной слот — для контента по умолчанию.
  • Именованные слоты — для определённой части структуры.

Композиция элементов позволяет строить сложные интерфейсы с изолированными компонентами, сохраняя изоморфность.


Директивы и условный рендеринг

FAST Element предлагает встроенные директивы для управления DOM:

  • if — условный рендеринг.
  • repeat — повторение элементов по массиву.
  • ref — доступ к узлам DOM напрямую.
import { repeat, when } from "@microsoft/fast-element";

const template = html`
  ${when(x => x.isVisible, html`

Видимый контент

`)} ${repeat(x => x.items, html`
  • ${i => i}
  • `)} `;
    • when создаёт блоки, которые добавляются или убираются из DOM.
    • repeat генерирует списки элементов с оптимизированной отрисовкой и минимальными изменениями DOM.

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

    FAST Element спроектирован с учётом производительности:

    1. Минимальные обновления DOM — обновляется только изменившаяся часть шаблона.
    2. Слабая зависимость от Virtual DOM — используется прямое связывание данных с реальными узлами.
    3. Асинхронная реактивность — изменения свойств батчатся для уменьшения количества перерисовок.

    Это делает FAST Element подходящим для крупных приложений с динамическим контентом и изоморфной архитектурой.