Fresh — это современный фреймворк для разработки веб-приложений, ориентированный на высокую производительность, минимальное время отклика и использование стандартов платформы. Основной принцип Fresh заключается в том, чтобы избегать лишней работы на клиенте: рендеринг происходит на сервере, а на клиент передается только необходимый минимальный JavaScript для интерактивности. Это позволяет создавать быстрые и легкие приложения, экономя ресурсы браузера и сети.
Fresh строится вокруг концепции islands architecture. Основная идея заключается в том, что сервер отдает статическую разметку HTML, а интерактивные части страницы (островки) подгружаются динамически.
Ключевые компоненты архитектуры:
Плагины в Fresh позволяют расширять функциональность приложения и интегрировать сторонние возможности. Создание собственного плагина требует понимания жизненного цикла приложения и механизма рендеринга.
Типичный плагин Fresh состоит из следующих элементов:
Экспорт функции плагина — основная точка входа. Функция получает объект конфигурации и возвращает объект с обработчиками событий и хук-подписками.
Хуки жизненного цикла — позволяют взаимодействовать с разными этапами рендеринга:
onRequest — срабатывает при каждом HTTP-запросе,
используется для модификации запроса или ответа.onRender — вызывается перед рендерингом компонента,
позволяет менять данные или контент.onResponse — срабатывает перед отправкой ответа
клиенту, можно добавлять заголовки или модифицировать HTML.Обработка конфигурации — плагин может принимать пользовательские настройки, которые определяют его поведение.
Пример базовой структуры плагина:
export default function myPlugin(options) {
return {
onRequest(req) {
// логика обработки запроса
},
onRender(context) {
// логика перед рендерингом компонента
},
onResponse(res) {
// модификация ответа перед отправкой клиенту
}
};
}
Для подключения плагина к приложению Fresh используется массив плагинов в конфигурации сервера:
import myPlugin from "./plugins/myPlugin.js";
export const plugins = [
myPlugin({ option1: true, option2: "value" })
];
Fresh минимизирует использование клиентского JS, но плагины могут добавлять интерактивность. Для этого используются островки (islands), которые подключаются через импорт компонента и его экспорт:
/** @jsx h */
import { h } from "preact";
export default function InteractiveButton() {
return (
<button onCl ick={() => alert("Нажато!")}>Кликни меня</button>
);
}
Для плагинов важно учитывать, что клиентский код должен быть максимально легким, иначе теряется основное преимущество Fresh — высокая скорость загрузки.
fetch и
URL API вместо сторонних библиотек для работы с сетью.Плагины могут интегрироваться с маршрутизатором Fresh, перехватывая запросы и модифицируя поведение роутов:
export default function authPlugin() {
return {
onRequest(req) {
if (!req.headers.get("Authorization")) {
return new Response("Unauthorized", { status: 401 });
}
}
};
}
Это позволяет создавать плагин-обертку для аутентификации, ограничения доступа или редиректов.
Плагины Fresh — это мощный инструмент для расширения функциональности приложения без увеличения нагрузки на клиент. Они строятся вокруг хук-механизма, интегрируются с серверным рендерингом и островками интерактивности. Правильная структура и минимизация клиентского кода обеспечивают высокую производительность и масштабируемость веб-приложений.