Метод createInstance в localForage предназначен для
создания изолированных экземпляров хранилища с независимой
конфигурацией. Каждый экземпляр функционирует как отдельный контейнер
для ключ-значение данных, при этом может использовать собственный
драйвер, префиксы, имя базы и настройки сериализации.
const store = localforage.createInstance(options);
Параметр options представляет собой объект
конфигурации:
{
name?: string,
storeName?: string,
driver?: string | string[],
size?: number,
version?: number,
description?: string,
driverOrder?: string[],
namePrefix?: string
}
Возвращаемое значение — новый экземпляр localForage, полностью совместимый с основным API библиотеки.
Каждый вызов createInstance создаёт отдельное логическое
пространство хранения. Это достигается за счёт комбинации
параметров:
namestoreNameДаже при использовании одного и того же физического хранилища (например, IndexedDB), данные разных экземпляров не пересекаются.
Ключевой принцип: экземпляры не разделяют пространство ключей, если конфигурация различается.
Определяет имя базы данных (в контексте IndexedDB или WebSQL).
localforage.createInstance({
name: 'appA'
});
Логическая таблица (object store) внутри базы.
localforage.createInstance({
name: 'appA',
storeName: 'cache'
});
Определяет используемый механизм хранения:
Можно задать строкой или массивом (fallback-цепочка):
localforage.createInstance({
driver: [
localforage.INDEXEDDB,
localforage.WEBSQL,
localforage.LOCALSTORAGE
]
});
Приоритет определяется порядком элементов.
Применяется только к WebSQL.
Используется в IndexedDB для версионирования схемы.
Человекочитаемое описание базы.
Альтернативный способ задания fallback-цепочки драйверов.
localforage.createInstance({
driverOrder: [
'indexeddb',
'websql',
'localstorage'
]
});
Добавочный префикс для ключей в хранилище.
Созданный экземпляр повторяет API глобального объекта:
const store = localforage.createInstance({ name: 'app' });
store.setItem('key', 'value');
store.getItem('key');
store.removeItem('key');
store.clear();
store.keys();
store.length();
store.iterate();
Однако внутреннее пространство ключей полностью отделено от основного
localforage.
Каждый экземпляр:
Изменения конфигурации глобального объекта не затрагивают уже созданные экземпляры.
При использовании createInstance формируется комбинация
идентификаторов:
database name + store name + driver namespace + prefix
В IndexedDB это соответствует:
namestoreNameВ localStorage:
const authStore = localforage.createInstance({
name: 'app',
storeName: 'auth'
});
const cacheStore = localforage.createInstance({
name: 'app',
storeName: 'cache'
});
Несмотря на общий name, данные разделены по
storeName.
const fastStore = localforage.createInstance({
driver: localforage.LOCALSTORAGE
});
const persistentStore = localforage.createInstance({
driver: localforage.INDEXEDDB
});
Такой подход позволяет разделять данные по критериям производительности и надёжности.
Каждый экземпляр использует общую систему сериализации localForage, если явно не переопределены настройки.
Однако:
Повторный вызов createInstance с одинаковыми
параметрами:
const a = localforage.createInstance({ name: 'app', storeName: 'cache' });
const b = localforage.createInstance({ name: 'app', storeName: 'cache' });
создаёт два независимых объекта API, но обращающихся к одному и тому же хранилищу.
Это означает:
Некоторые параметры имеют платформенные ограничения:
size работает только в WebSQLversion актуален только для IndexedDBdriver может быть проигнорирован, если недоступенnamePrefix не гарантирует изоляцию в IndexedDBПри вызове createInstance происходит:
Инициализация фактически отложена до первого обращения к
setItem, getItem и аналогичным методам.
Глобальный localforage и экземпляры:
name/storeNameconst store = localforage.createInstance({ name: 'app' });
store.config({ name: 'other' });
Изменение конфигурации:
Поэтому конфигурация считается фиксированной на момент создания экземпляра.
Использование createInstance практически не влияет на
runtime:
Основное влияние связано не с самим экземпляром, а с выбранным storage backend.
createInstance является механизмом:
Внутри localForage он выступает как ключевой инструмент мульти-контекстной работы с клиентским хранилищем.