В localForage параметр storeName определяет имя внутреннего хранилища данных внутри выбранного драйвера (IndexedDB, WebSQL или localStorage-эмуляция). Он используется как логический контейнер для ключей и значений, позволяющий разделять данные внутри одного приложения или одной базы данных.
localForage строит абстракцию поверх разных механизмов хранения браузера. Несмотря на различия между IndexedDB, WebSQL и localStorage, библиотека приводит работу к единому интерфейсу.
Параметр storeName участвует в формировании структуры хранения следующим образом:
Таким образом, storeName выступает как логическая граница данных внутри одного пространства хранения.
storeName работает в связке с параметрами конфигурации localForage:
Комбинация name + storeName формирует уникальный
контекст хранения, который влияет на изоляцию данных.
При инициализации localForage создаётся структура, зависящая от драйвера:
namestoreNameПример:
localforage.config({
name: 'appDB',
storeName: 'users'
});
Результат в IndexedDB:
appDBusersnamestoreNameПример структуры таблицы:
CRE ATE TABLE IF NOT EXISTS users (key unique, value)
В localStorage отсутствуют базы и таблицы, поэтому используется ключевое пространство:
appDB/users/someKey
Таким образом storeName становится частью строкового префикса.
Использование storeName позволяет разделять данные внутри одного приложения без необходимости создавать несколько баз данных.
Типичные сценарии:
Пример логического разделения:
localforage.config({
name: 'crmApp',
storeName: 'clients'
});
localforage.setItem('123', { name: 'Alex' });
Другой модуль:
localforage.config({
name: 'crmApp',
storeName: 'settings'
});
localforage.setItem('theme', 'dark');
Обе структуры используют одну базу, но данные не пересекаются.
storeName подчиняется ограничениям драйверов браузера:
Изменение storeName после того, как данные уже записаны, приводит к созданию нового пространства хранения.
Пример:
localforage.config({
name: 'appDB',
storeName: 'users'
});
Позже:
localforage.config({
name: 'appDB',
storeName: 'accounts'
});
Результат:
users остаются в старом storeaccounts создаётся пустымЭто важно учитывать при миграциях и рефакторинге.
storeName сохраняет свою роль при переключении драйверов:
Однако структура хранения пересоздаётся в рамках нового механизма, что может привести к логической изоляции данных.
Хорошо структурированные проекты используют предсказуемые соглашения:
usersproductsorderscachesessionmetadataauthModuledashboardModuleanalyticsModuleХотя storeName изолирует данные, ошибки в именовании могут привести к:
Особенно критично использование одинаковых storeName в разных частях приложения при общем значении name базы.
Влияние параметра косвенное, но проявляется через структуру хранения:
Чрезмерное дробление на множество storeName может усложнить управление транзакциями и миграциями.
localForage не предоставляет встроенной миграции между storeName. Перенос данных выполняется вручную:
async function migrate(oldStore, newStore) {
const oldLF = localforage.createInstance({
name: 'appDB',
storeName: oldStore
});
const newLF = localforage.createInstance({
name: 'appDB',
storeName: newStore
});
await oldLF.iterate(async (value, key) => {
await newLF.setItem(key, value);
});
}
Такая схема позволяет безопасно переносить данные между логическими контейнерами.
Хотя storeName задаётся глобально через config, более гибкий подход
основан на createInstance:
const usersStore = localforage.createInstance({
name: 'appDB',
storeName: 'users'
});
const logsStore = localforage.createInstance({
name: 'appDB',
storeName: 'logs'
});
Каждый экземпляр имеет собственную изолированную область хранения, что снижает риск конфликтов конфигурации.
Если storeName не указан явно, используется значение по умолчанию:
keyvaluepairs
Это значение закреплено внутри реализации IndexedDB-драйвера и применяется автоматически при отсутствии пользовательской конфигурации.
Использование дефолтного storeName допустимо для простых сценариев, но ограничивает масштабируемость архитектуры.
storeName фактически определяет уровень логической сегментации данных:
Такая модель позволяет строить иерархическую организацию хранения без дополнительной абстракции.
Частые ошибки включают:
Такие ошибки приводят к фрагментации данных и усложнению отладки.
В масштабных приложениях storeName становится ключевым элементом архитектуры хранения:
Такой подход снижает связность компонентов и упрощает поддержку долгоживущих приложений.