Fresh — это современный подход к рендерингу веб-приложений, который фокусируется на минимизации избыточных операций при обновлении интерфейса. Основная идея заключается в том, чтобы каждый компонент или участок страницы рендерился только тогда, когда это действительно необходимо, что обеспечивает высокую производительность и экономию ресурсов.
В основе концепции лежит принцип «ререндер только свежего»: состояние приложения отслеживается на уровне отдельных компонентов, и при изменении данных происходит перерисовка исключительно тех частей DOM, которые затронуты изменением.
Fresh использует реактивные данные или объекты состояния, которые умеют уведомлять систему о своем изменении. В отличие от классического подхода, когда вся страница или крупный компонент полностью перерисовывается при любом обновлении данных, Fresh:
Такой подход снижает нагрузку на браузер и ускоряет взаимодействие пользователя с интерфейсом.
Данные передаются от источника правды (state) вниз к компонентам. Любое изменение состояния инициирует локальный ререндер. Важный момент — данные не передаются обратно напрямую; взаимодействие с состоянием происходит через специализированные функции обновления, что предотвращает неожиданные побочные эффекты.
В Fresh для реализации реактивности часто используются:
Пример использования сигнала и эффекта:
import { signal, effect } from 'fresh-js';
const count = signal(0);
effect(() => {
console.log(`Текущее значение: ${count.value}`);
});
count.value = 1; // В консоли появится: "Текущее значение: 1"
В этом примере эффект реагирует исключительно на изменение
count, не трогая другие части приложения.
В традиционном подходе на основе виртуального DOM:
В Fresh:
Fresh интегрируется с современными подходами к управлению состоянием:
Пример локального и глобального состояния:
// Глобальный стор
import { signal } from 'fresh-js';
export const user = signal({ name: 'Alice', loggedIn: false });
// Локальный компонент
import { effect } from 'fresh-js';
import { user } from './store.js';
effect(() => {
if (user.value.loggedIn) {
console.log(`Добро пожаловать, ${user.value.name}`);
}
});
Использование Fresh позволяет обновлять только конкретный узел или компонент, не затрагивая родительские элементы и соседние компоненты. Это критически важно для интерфейсов с большим количеством интерактивных блоков, таблиц, списков или графиков.
Fresh не заменяет полностью экосистему JavaScript. Его можно интегрировать: