Fresh — это современный фреймворк для разработки веб-приложений на JavaScript, ориентированный на производительность и минимизацию накладных расходов. Основная идея Fresh заключается в том, чтобы максимально использовать преимущества нативного рендеринга на сервере и статических ресурсов, одновременно позволяя добавлять интерактивность на уровне компонентов.
Fresh строится вокруг компонентного подхода, где каждый компонент представляет собой изолированный блок с собственным состоянием и логикой. Компоненты рендерятся на сервере в HTML, а клиентская часть получает только минимально необходимый JavaScript для интерактивности. Такой подход снижает время загрузки страниц и уменьшает объем передаваемых данных.
Ключевые принципы архитектуры:
Компоненты в Fresh могут быть функциональными и классическими. Основная практика — использование функциональных компонентов с реактивными свойствами:
export default function Counter() {
let count = 0;
return (
<button onCl ick={() => count++}>
Счётчик: {count}
</button>
);
}
Важный момент: при рендеринге на сервере локальное состояние не сохраняется между запросами. Для долговременного хранения данных используются серверные эндпоинты или глобальные хранилища.
Одной из сильных сторон Fresh является возможность тонкой настройки кэширования на уровне компонентов. Это позволяет контролировать время жизни HTML и API-ответов, оптимизируя нагрузку на сервер.
Механизмы кэширования:
Static Rendering (SSG) Компоненты могут рендериться как статические страницы на этапе сборки. Результат сохраняется на диске и отдается пользователю без генерации на каждом запросе. Подходит для страниц, которые редко меняются.
Server-Side Caching Для динамических компонентов
можно использовать заголовки Cache-Control, указывая время
жизни контента. Например:
export const handler = async (req, ctx) => {
ctx.response.headers.set("Cache-Control", "max-age=60"); // кэширование 60 секунд
return ctx.render({ data: await fetchData() });
};
import { memoize } from "lodash";
const expensiveCalculation = memoize((input) => {
// сложные вычисления
return result;
});
Fresh интегрируется с любыми источниками данных, при этом кэширование можно реализовать как на сервере, так и на клиенте:
fetch с
заголовками Cache-Control и ETag, что
уменьшает повторные сетевые вызовы.async function getData() {
const res = await fetch("/api/data", { cache: "force-cache" });
return res.json();
}
Fresh поддерживает эффективное использование CDN для распространения
статического контента. Кэширование на CDN позволяет снизить нагрузку на
сервер и ускоряет доставку HTML, CSS и JS. Заголовки
Cache-Control и ETag автоматически помогают
CDN управлять сроком хранения и проверкой актуальности ресурсов.
Fresh сочетает серверный рендеринг и минимальный клиентский JavaScript с гибкой системой кэширования, позволяя:
Эти возможности делают Fresh подходящим инструментом для проектов, где важны высокая производительность, SEO и быстрый отклик интерфейса.