FAST Element — это современная библиотека для создания Web Components с высокой производительностью и гибкой системой реактивности. Хотя она изначально ориентирована на работу в браузере, она также поддерживает серверный рендеринг (SSR, Server-Side Rendering), что позволяет улучшать SEO, ускорять первичную загрузку страницы и повышать общую производительность.
Серверный рендеринг с FAST Element строится вокруг концепции генерации HTML на сервере с возможностью последующей “гидратации” на клиенте. Ключевой элемент — renderToString, который превращает компонент в HTML-строку.
Для работы с SSR потребуется несколько пакетов:
npm install @microsoft/fast-element @microsoft/fast-server-renderer
@microsoft/fast-element — библиотека компонентов и
реактивной модели.@microsoft/fast-server-renderer — утилиты для генерации
HTML на сервере.Компоненты FAST создаются через FASTElement и декораторы
@customElement и @attr:
import { FASTElement, customElement, html, css, attr } from "@microsoft/fast-element";
const template = html<MyComponent>`
<div class="container">
<h1>${x => x.title}</h1>
<p>${x => x.description}</p>
</div>
`;
const styles = css`
.container {
padding: 16px;
background-color: #f5f5f5;
}
h1 {
font-size: 24px;
color: #333;
}
p {
font-size: 16px;
color: #666;
}
`;
@customElement({ name: "my-component", template, styles })
class MyComponent extends FASTElement {
@attr title = "Заголовок";
@attr description = "Описание компонента";
}
Каждый компонент может содержать реактивные атрибуты, которые будут автоматически отображены в HTML при рендеринге на сервере.
renderToStringДля генерации HTML на сервере используется
renderToString:
import { renderToString } from "@microsoft/fast-server-renderer";
import { MyComponent } from "./MyComponent.js";
async function renderComponent() {
const html = await renderToString(MyComponent, { title: "Привет", description: "SSR с FAST Element" });
console.log(html);
}
renderComponent();
Особенности работы:
renderToString принимает класс
компонента и объект данных, соответствующий
атрибутам.SSR чаще всего используется в связке с Node.js. Пример сервера на Express:
import express from "express";
import { renderToString } from "@microsoft/fast-server-renderer";
import { MyComponent } from "./MyComponent.js";
const app = express();
app.get("/", async (req, res) => {
const htmlContent = await renderToString(MyComponent, {
title: "Главная страница",
description: "Пример SSR с FAST Element"
});
res.send(`
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>SSR FAST</title>
</head>
<body>
${htmlContent}
<script type="module" src="/client.js"></script>
</body>
</html>
`);
});
app.listen(3000);
После SSR HTML на клиенте необходимо сделать интерактивным. FAST Element поддерживает “client hydration”:
import { hydrate, FASTElement } from "@microsoft/fast-element";
import { MyComponent } from "./MyComponent.js";
hydrate(document.body, { MyComponent });
hydrate ищет в DOM элементы с соответствующими тегами
компонентов и связывает их с реактивными свойствами.FAST Element поддерживает передачу данных на сервер через объект свойств:
const props = {
title: "Новости",
description: "Динамически загруженные данные"
};
const html = await renderToString(MyComponent, props);
Можно интегрировать с базой данных или API для генерации серверного HTML с актуальной информацией.
Стили FAST Element встроены в компоненты и автоматически применяются при SSR:
style внутри рендеренного HTML.css и styles внутри
компонента для изоляции стилей.Для улучшения производительности часто используют кэширование HTML:
const cache = new Map();
app.get("/", async (req, res) => {
if (cache.has("home")) {
return res.send(cache.get("home"));
}
const htmlContent = await renderToString(MyComponent, {
title: "Главная страница",
description: "SSR с FAST Element"
});
const fullHtml = `
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>SSR FAST</title>
</head>
<body>
${htmlContent}
<script type="module" src="/client.js"></script>
</body>
</html>
`;
cache.set("home", fullHtml);
res.send(fullHtml);
});
window, document и других
объектов DOM.FAST Element позволяет создавать компоненты, которые работают
одинаково хорошо как на клиенте, так и на сервере. SSR с
renderToString обеспечивает генерацию HTML на сервере,
ускоряет отображение страницы и улучшает SEO, при этом оставляя
возможность интерактивности через гидратацию.
Сочетание модульности компонентов, реактивных свойств и серверного рендеринга делает FAST Element эффективным инструментом для современных веб-приложений.