Fresh — это современный фреймворк для разработки веб-приложений на JavaScript и TypeScript, ориентированный на высокую производительность и минимизацию объёма клиентского кода. Основная идея Fresh заключается в рендеринге страниц на сервере (SSR) с генерацией полностью интерактивных компонентов без необходимости использования больших библиотек на клиентской стороне.
Fresh строится на принципах:
Компоненты Fresh напоминают React, но имеют ряд особенностей:
components или в папках маршрутов
routes. Имя файла определяет URL, если компонент находится
в routes.export default function Button({ label }: { label: string }) {
return <button class="btn">{label}</button>;
}
Fresh использует файловую маршрутизацию:
routes/index.tsx → /routes/about.tsx → /aboutroutes/[id].tsx → /123Каждая страница экспортирует функцию handler, которая
обрабатывает серверные запросы:
import { Handlers } from "$fresh/server.ts";
export const handler: Handlers = {
GET(req, ctx) {
return ctx.render({ message: "Привет, Fresh!" });
}
};
Fresh предоставляет механизм ctx.render для передачи
данных на страницу. Он позволяет интегрировать серверные данные в
компонент без дополнительных API-запросов на клиент:
export default function Page({ data }: { data: { message: string } }) {
return <h1>{data.message}</h1>;
}
UnoCSS — это утилита для генерации атомарных CSS-классов на лету, полностью совместимая с Fresh. Основные моменты:
uno.config.ts, где задаются правила генерации классов,
темы, пресеты.preset-wind (Tailwind-подобные утилиты) и
preset-icons.export default function Card() {
return (
<div class="p-4 bg-white shadow-lg rounded-lg">
<h2 class="text-xl font-bold">Заголовок</h2>
<p class="text-gray-700">Описание карточки</p>
</div>
);
}
const color = "red-500";
return <div class={`bg-${color} p-2`}>Текст</div>;
Fresh и UnoCSS вместе обеспечивают:
Fresh использует Deno для сборки и запуска приложений:
deno task start
запускает сервер с горячей перезагрузкой.deno task build формирует
статические страницы и необходимые скрипты.Для интерактивных компонентов используются стандартные обработчики событий в JSX:
export default function Counter() {
let count = 0;
function increment() {
count++;
console.log(count);
}
return <button onCl ick={increment}>Нажми меня</button>;
}
Ключевой момент — интерактивность загружается только там, где она необходима, остальная страница остаётся статической.
Совместное использование Fresh и UnoCSS позволяет:
В результате получаются современные веб-приложения, оптимизированные по скорости загрузки и лёгкости поддержки.