Библиотека Idb-keyval предоставляет высокоуровневый интерфейс для работы с IndexedDB, упрощая операции хранения и извлечения данных. Одной из ключевых задач при работе с хранилищем является удаление устаревших или ненужных ключей, что позволяет поддерживать базу данных в оптимальном состоянии и экономить ресурсы.
Idb-keyval предоставляет несколько методов для удаления данных:
del(key) — удаляет значение по
конкретному ключу.
import { del } from 'idb-keyval';
del('user_123').then(() => {
console.log('Ключ удалён');
});
Особенности:
clear() — очищает всю базу
данных.
import { clear } from 'idb-keyval';
clear().then(() => {
console.log('База очищена');
});
Применение:
В реальных приложениях часто встречается ситуация, когда данные имеют
временной срок жизни. Для этого можно хранить объекты с
полем timestamp и удалять устаревшие записи:
import { get, del } from 'idb-keyval';
async function removeExpired(key, ttl) {
const item = await get(key);
if (!item) return;
const now = Date.now();
if (now - item.timestamp > ttl) {
await del(key);
console.log(`Ключ ${key} устарел и удалён`);
}
}
Объяснение логики:
ttl (Time-To-Live) задаёт допустимый период хранения в
миллисекундах.get(key).del(key).Для работы с множеством ключей удобно использовать функцию
keys(), которая возвращает массив всех
ключей хранилища:
import { keys, get, del } from 'idb-keyval';
async function cleanExpired(ttl) {
const allKeys = await keys();
const now = Date.now();
for (const key of allKeys) {
const item = await get(key);
if (item && now - item.timestamp > ttl) {
await del(key);
console.log(`Удалён устаревший ключ: ${key}`);
}
}
}
Особенности:
Promise.all, но с осторожностью, чтобы не перегрузить
IndexedDB.timestamp или expiry, чтобы однозначно
определять устаревшие записи.setInterval или при загрузке страницы.user_,
cache_), можно выполнять выборочную очистку только для
конкретной группы.// Удаление устаревших кэшей на 24 часа
const ONE_DAY = 24 * 60 * 60 * 1000;
cleanExpired(ONE_DAY);
// Удаление устаревших сессий на 1 час
const ONE_HOUR = 60 * 60 * 1000;
cleanExpired(ONE_HOUR);
Такой подход позволяет эффективно управлять данными, минимизировать рост базы и поддерживать производительность приложений на долгом сроке эксплуатации.
Idb-keyval поддерживает сочетание операций:
import { set, get, del } from 'idb-keyval';
async function updateAndClean(key, value, ttl) {
await set(key, { value, timestamp: Date.now() });
await removeExpired(key, ttl);
}
Это удобно для обновления данных и автоматической очистки устаревших версий в одном потоке.
Удаление устаревших ключей в Idb-keyval — фундаментальный механизм
управления хранилищем. Использование del,
clear, keys и логики TTL позволяет
поддерживать данные актуальными, освобождать память и обеспечивать
высокую производительность приложений на JavaScript.