В библиотеке localForage параметр name
определяет имя логической базы данных, которая создаётся поверх
доступных механизмов хранения браузера: IndexedDB,
WebSQL (устаревший) или localStorage.
Этот параметр играет ключевую роль в изоляции данных между различными
приложениями и их экземплярами, а также влияет на структуру хранилища в
IndexedDB.
name в
архитектуре localForageПри инициализации localForage создаётся абстракция над нативными API хранения. В случае IndexedDB формируется база данных, внутри которой находятся object store (аналог таблиц).
Параметр name:
Если не задан явно, применяется значение по умолчанию:
localforage.config({
name: 'localforage'
});
Таким образом, все данные будут помещены в базу с именем
localforage.
В IndexedDB параметр name становится именем базы
данных:
localforage.config({
name: 'myAppDB'
});
Результат в браузере:
myAppDBkeyvaluepairs или заданный storeName)Это означает, что все ключи и значения будут изолированы внутри этой базы.
В WebSQL name соответствует имени базы данных SQL:
localforage.config({
name: 'myAppDB'
});
Создаётся SQL-база:
OPEN DATABASE myAppDB;
Хотя WebSQL считается устаревшим стандартом, localForage поддерживает его как fallback.
В случае localStorage параметр name не создаёт реальную
базу данных, но участвует в формировании ключей:
myAppDB/keyName
Или аналогичный префикс, зависящий от реализации драйвера.
nameОдним из ключевых применений name является разделение
данных между разными приложениями или модулями.
const appStorage = localforage.createInstance({
name: 'appStorage'
});
const cacheStorage = localforage.createInstance({
name: 'cacheStorage'
});
В результате:
appStorage не пересекаются с
cacheStoragename и
storeNameВажно различать два параметра:
name — имя базы данныхstoreName — имя object store внутри базыlocalforage.config({
name: 'myDatabase',
storeName: 'users'
});
Структура в IndexedDB:
Database: myDatabase
ObjectStore: users
При этом изменение name создаёт полностью новую базу, а
изменение storeName лишь меняет структуру внутри неё.
localForage позволяет создавать независимые экземпляры через
createInstance. Каждый экземпляр может иметь собственное
значение name.
const userDB = localforage.createInstance({
name: 'userDB'
});
const settingsDB = localforage.createInstance({
name: 'settingsDB'
});
Каждый экземпляр:
nameИзменение значения name после записи данных приводит к
фактическому переключению на другую базу.
localforage.config({ name: 'db1' });
await localforage.setItem('key', 'value');
localforage.config({ name: 'db2' });
await localforage.getItem('key'); // null
Причина:
db1 и db2 — разные IndexedDB базыПри выборе значения name учитываются ограничения
браузерных API:
app_name, project_v2)Примеры корректных значений:
name: 'todoApp'
name: 'analytics_dashboard'
name: 'user_cache_v1'
nameЕсли параметр не указан:
localforage.config({});
используется значение по умолчанию:
localforagelocalforagelocalforageЭто может привести к конфликтам при использовании нескольких независимых модулей в одном origin.
nameТипичный паттерн разделения данных:
const authStorage = localforage.createInstance({
name: 'authDB',
storeName: 'auth'
});
const cacheStorage = localforage.createInstance({
name: 'cacheDB',
storeName: 'responses'
});
const settingsStorage = localforage.createInstance({
name: 'settingsDB',
storeName: 'config'
});
Такое разделение обеспечивает:
При смене name браузер:
Это означает, что смена имени базы фактически эквивалентна созданию нового хранилища с нуля.
При использовании name: 'appDB' структура выглядит
следующим образом:
IndexedDB
└── appDB (Database)
└── keyvaluepairs (Object Store)
├── key: "user"
├── key: "settings"
При создании другого экземпляра:
IndexedDB
└── cacheDB (Database)
└── keyvaluepairs
Каждая база изолирована на уровне браузера.
name в многомодульных приложенияхВ архитектуре SPA или микрофронтендов параметр name
часто становится инструментом пространственной изоляции:
authDBanalyticsDBofflineDBТакое разделение предотвращает:
Параметр name формирует верхнеуровневую границу данных в
localForage, определяя: