Библиотека Idb-keyval предоставляет простой интерфейс для работы с IndexedDB, позволяя сохранять пары ключ-значение в браузере. Ключи в этой библиотеке могут быть любого типа, но на практике чаще всего используются строковые ключи, так как они обеспечивают предсказуемость и совместимость с различными механизмами сериализации данных.
Однозначность ключей Каждый ключ должен быть уникальным в рамках конкретного хранилища. При попытке записать значение по уже существующему ключу старое значение перезаписывается. Использование строк позволяет легко создавать читаемые и предсказуемые идентификаторы.
Читаемость и семантика Хорошая практика — выбирать ключи, которые отражают смысл хранимых данных. Например:
import { set, get } from 'idb-keyval';
set('user:123', { name: 'Алексей', age: 28 });
get('user:123').then(console.log);
Здесь префикс user: сразу сообщает, что ключ относится к
данным пользователя, а число 123 — уникальный
идентификатор.
Использование префиксов и пространств имён Для организации данных внутри одного хранилища рекомендуется использовать разделители и префиксы:
settings:theme — тема приложенияcache:posts:456 — закешированные данные поста с ID
456session:token — токен текущей сессииТакой подход облегчает поиск, удаление и фильтрацию ключей по смысловым группам.
: или / в URL-подобных
ключах используется только как разделитель).User:123 и user:123 — разные
ключи.Короткие, но информативные ключи Не стоит делать ключи чрезмерно длинными, достаточно краткого префикса и идентификатора.
set('cfg:lang', 'ru');
set('cfg:theme', 'dark');Иерархические ключи Разделители :
или . позволяют формировать логические группы. Это полезно
для массового удаления или выборки данных:
set('cache:posts:1', {...});
set('cache:posts:2', {...});
set('cache:users:1', {...});Уникальные идентификаторы Для объектов с динамически создаваемыми ID лучше комбинировать префикс и ID:
const postId = 789;
set(`post:${postId}`, { title: 'Новость', content: 'Текст...' });Хотя ключи могут быть строками, значения могут быть любыми сериализуемыми объектами. В сочетании с правильной схемой именования строковых ключей можно эффективно имитировать хэш-таблицу или словари:
set('user:100', { name: 'Мария', email: 'maria@example.com' });
set('user:101', { name: 'Иван', email: 'ivan@example.com' });
// Получение всех пользователей требует фильтрации по ключу
import { keys } from 'idb-keyval';
keys().then(allKeys => {
const userKeys = allKeys.filter(k => k.startsWith('user:'));
console.log(userKeys);
});
Для крупных проектов полезно создавать константы или утилиты для генерации ключей, чтобы избежать ошибок и дублирования:
const KEYS = {
USER: (id) => `user:${id}`,
SETTINGS_THEME: 'settings:theme'
};
set(KEYS.USER(123), { name: 'Алексей' });
get(KEYS.SETTINGS_THEME).then(console.log);
Такой подход снижает риск опечаток и обеспечивает единообразие по всему проекту.
user,
cache, settings):, .)123, token, posts)Использование этих принципов делает работу с Idb-keyval предсказуемой, масштабируемой и удобной для дальнейшей поддержки кода.