Fresh — это современный фреймворк для разработки
веб-приложений, построенный на Deno, ориентированный на
производительность и минимализм. Основная идея Fresh
заключается в том, чтобы рендерить страницы на сервере без необходимости
бандлинга и клиентских библиотек, что позволяет достигать мгновенной
загрузки и высокой скорости отклика.
Ключевой особенностью является использование сигнатурных компонентов и островной архитектуры (islands architecture), где интерактивные части страницы становятся отдельными островами на статической HTML-странице.
Серверный рендеринг без бандлов Все страницы рендерятся на сервере, а HTML отправляется на клиент без промежуточного JavaScript-бандла. Это обеспечивает:
Островная архитектура (Islands Architecture) В
Fresh интерактивные компоненты не влияют на весь документ
целиком. Каждый компонент на странице может быть активирован отдельно.
Преимущества:
Использование JSX и Preact Компоненты пишутся с использованием JSX и Preact. Preact используется как легковесная альтернатива React, обеспечивая совместимость с привычной моделью компонентов, но с меньшим размером кода.
CDN (Content Delivery Network) позволяет подключать внешние
библиотеки без локального хранения файлов и сборки. В контексте
Fresh CDN используется для подключения Preact или других
фронтенд-библиотек напрямую в проект.
Подключение через CDN осуществляется следующим образом:
/** @jsx h */
import { h } from "https://esm.sh/preact@10.11.0";
import { useState } from "https://esm.sh/preact@10.11.0/hooks";
Ключевые моменты:
https://esm.sh/ позволяет импортировать
библиотеки в формате ES Modules.FreshСкорость разработки Нет необходимости устанавливать и обновлять пакеты через npm, можно сразу использовать нужные модули.
Легкая интеграция CDN позволяет использовать сторонние библиотеки без сложной конфигурации сборщика.
Минимальный размер проекта Проект остаётся компактным, так как файлы хранятся на сервере CDN, а не локально.
Контроль версий Явное указание версии в URL обеспечивает предсказуемость работы приложения и стабильность зависимостей.
Компоненты с клиентской логикой можно подключать через CDN и рендерить их на отдельных островах:
/** @jsx h */
import { h } from "https://esm.sh/preact@10.11.0";
import { useState } from "https://esm.sh/preact@10.11.0/hooks";
export default function Counter() {
const [count, setCount] = useState(0);
return (
<button onCl ick={() => setCount(count + 1)}>
Нажато {count} раз
</button>
);
}
Для включения этого компонента в страницу используется директива
Island:
import Counter from "../components/Counter.tsx";
import { Island } from "$fresh/runtime.ts";
export default function Home() {
return (
<div>
<h1>Пример Counter</h1>
<Island island={Counter} />
</div>
);
}
esm.sh или skypack.dev для
получения ES-модулей.Эта интеграция делает Fresh мощным инструментом для
создания быстрых и современных веб-приложений с минимальной зависимостью
от сборки и сложных инструментов.