← Назад к вопросам
Как настраивать кеширование?
2.0 Middle🔥 111 комментариев
#Soft Skills и рабочие процессы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Стратегии кеширования в веб-приложениях
Кеширование - это ключевой механизм оптимизации производительности современных веб-приложений. В контексте фронтенда существуют несколько уровней кеширования, каждый из которых решает свои задачи.
Типы кеширования
1. HTTP кеширование
Управляется заголовками, которые говорят браузеру, как долго хранить ресурсы:
// Пример: кеширование статических активов на 1 год
// Cache-Control: public, max-age=31536000, immutable
// А для динамического контента: 1 час
// Cache-Control: public, max-age=3600, must-revalidate
В Next.js это настраивается через метаданные или fetch options:
// Кеширование fetch запроса на 60 секунд
fetch("https://api.example.com/data", {
next: { revalidate: 60 }
})
// Отключение кеширования
fetch("https://api.example.com/data", {
cache: "no-store"
})
2. В памяти приложения (Runtime caching)
Хранение данных в памяти JavaScript для быстрого доступа:
// Простой паттерн кеша
class CacheManager {
constructor(ttl = 5 * 60 * 1000) { // 5 минут
this.cache = new Map();
this.ttl = ttl;
}
set(key, value) {
const expiresAt = Date.now() + this.ttl;
this.cache.set(key, { value, expiresAt });
}
get(key) {
const item = this.cache.get(key);
if (!item) return null;
if (Date.now() > item.expiresAt) {
this.cache.delete(key);
return null;
}
return item.value;
}
}
// Использование
const cache = new CacheManager();
cache.set("user:123", { name: "John", age: 30 });
console.log(cache.get("user:123")); // { name: "John", age: 30 }
3. localStorage и sessionStorage
Персистентное хранилище на стороне клиента:
// Сохранение с TTL
function setWithTTL(key, value, ttl) {
const item = {
value: value,
expiresAt: Date.now() + ttl
};
localStorage.setItem(key, JSON.stringify(item));
}
function getWithTTL(key) {
const stored = localStorage.getItem(key);
if (!stored) return null;
const item = JSON.parse(stored);
if (Date.now() > item.expiresAt) {
localStorage.removeItem(key);
return null;
}
return item.value;
}
// sessionStorage для временных данных сессии
sessionStorage.setItem("temp_filter", JSON.stringify(filters));
4. Service Worker и IndexedDB
Для сложного офлайн кеширования:
// Регистрация Service Worker
if ("serviceWorker" in navigator) {
navigator.serviceWorker.register("/sw.js");
}
// В Service Worker
self.addEventListener("fetch", (event) => {
event.respondWith(
caches.match(event.request)
.then(response => {
return response || fetch(event.request)
.then(response => {
// Кеширование успешного ответа
const cloned = response.clone();
caches.open("v1").then(cache => {
cache.put(event.request, cloned);
});
return response;
});
})
);
});
Best Practices
- Кешируй с умом - не всё нужно кешировать. Фокусируйся на дорогих операциях
- Управляй инвалидацией - имей стратегию, когда кеш становится устаревшим
- Мониторь размер - избегай утечек памяти в runtime кеше
- Используй правильные заголовки - не полагайся только на браузерное кеширование
Кеширование - это баланс между производительностью и актуальностью данных.