Preact — это лёгкая альтернатива React, обеспечивающая высокую производительность при минимальном размере библиотеки. Одним из ключевых подходов при работе с Preact является статическая генерация сайтов (Static Site Generation, SSG), которая позволяет заранее создавать HTML-страницы на этапе сборки, уменьшая нагрузку на клиент и ускоряя загрузку страниц.
Статическая генерация заключается в формировании готовых HTML-файлов во время сборки проекта. В отличие от классического рендеринга на клиенте, где весь контент генерируется в браузере, SSG позволяет серверу или сборочному инструменту подготовить страницы заранее. Это приводит к следующим преимуществам:
В Preact статическая генерация часто используется вместе с инструментами вроде Preact CLI, Vite, Astro или Eleventy, которые обеспечивают сборку проекта и создание статических HTML-файлов.
Preact CLI предоставляет встроенные возможности для генерации статических страниц. Ключевые этапы процесса:
npx preact-cli create default my-project
cd my-project
Структура страниц: Файлы в папке
src/routes автоматически превращаются в маршруты. Например,
src/routes/about.js станет страницей
/about.
Добавление контента: Компоненты Preact используют JSX для описания разметки:
import { h } from 'preact';
export default function About() {
return (
<div>
<h1>О нас</h1>
<p>Это пример статически сгенерированной страницы на Preact.</p>
</div>
);
}
npm run build
После выполнения команды создаётся папка build,
содержащая готовые HTML-файлы для каждой страницы. Эти файлы можно
разместить на любом статическом хостинге.
Preact поддерживает генерацию страниц с динамическими данными, загружаемыми во время сборки. Например, можно использовать API для получения списка постов и рендерить их как отдельные страницы:
// src/routes/posts.js
import { h } from 'preact';
import { useState, useEffect } from 'preact/hooks';
export default function Posts() {
const [posts, setPosts] = useState([]);
useEffect(() => {
fetch('https://jsonplaceholder.typicode.com/posts')
.then(res => res.json())
.then(data => setPosts(data));
}, []);
return (
<div>
<h1>Посты</h1>
<ul>
{posts.map(post => (
<li key={post.id}>{post.title}</li>
))}
</ul>
</div>
);
}
В данном случае данные загружаются на клиенте после загрузки страницы. Для полностью статической генерации можно использовать генерацию страниц на этапе сборки, извлекая данные заранее и создавая HTML напрямую.
Использование Vite и Astro позволяет комбинировать Preact с SSG более гибко. Пример настройки Astro:
---
// src/pages/index.astro
import MyComponent from '../components/MyComponent.jsx';
const posts = await fetch('https://jsonplaceholder.typicode.com/posts')
.then(res => res.json());
---
<html>
<body>
<MyComponent posts={posts} />
</body>
</html>
В этом подходе данные загружаются на этапе сборки, а результат отдаётся как готовый HTML. Preact-компоненты гидратируются на клиенте для интерактивности.
lazy и Suspense для
отложенной загрузки компонентов, чтобы уменьшить initial bundle
size.Preact в сочетании с SSG позволяет создавать быстрые, лёгкие и SEO-оптимизированные сайты. Поддержка гидратации и совместимость с React-компонентами делают Preact идеальным инструментом для проектов, где критична скорость загрузки и размер финального бандла. Правильная интеграция с современными сборщиками позволяет строить масштабируемые приложения с высокой интерактивностью без компромиссов по производительности.