В библиотеке localForage выбор механизма хранения данных основан на концепции драйверов. Каждый драйвер представляет собой отдельную реализацию хранилища браузера с собственными характеристиками производительности, лимитов и совместимости. Для явного управления используются три встроенные константы: INDEXEDDB, WEBSQL, LOCALSTORAGE.
Эти значения не являются произвольными строками приложения, а представляют стандартизированные идентификаторы, используемые внутри localForage для определения backend-слоя хранения.
LOCALSTORAGE — самый простой и наиболее широко поддерживаемый механизм хранения данных в браузерах.
Особенности:
В localForage данный драйвер используется как fallback, когда более современные решения недоступны.
Поведение при работе через localForage:
Пример использования:
localforage.setDriver(localforage.LOCALSTORAGE)
.then(() => localforage.setItem('key', { a: 1 }));
LOCALSTORAGE часто применяется в средах с ограничениями, где IndexedDB недоступен, например в старых браузерах или некоторых embedded WebView.
WEBSQL — устаревший, но всё ещё поддерживаемый в некоторых браузерах SQL-подобный механизм хранения.
Характеристики:
WEBSQL используется в localForage как промежуточный драйвер между LOCALSTORAGE и INDEXEDDB в системах, где IndexedDB работает нестабильно или недоступен.
Особенности поведения:
Пример явного указания:
localforage.setDriver(localforage.WEBSQL)
.then(() => localforage.setItem('user', { name: 'Alex' }));
Несмотря на функциональность, WEBSQL рассматривается как legacy-решение и используется только в целях обратной совместимости.
INDEXEDDB — основной современный механизм хранения, предназначенный для работы с большими объёмами структурированных данных.
Ключевые свойства:
В localForage этот драйвер является предпочтительным.
Поведение:
Пример использования:
localforage.setDriver(localforage.INDEXEDDB)
.then(() => localforage.setItem('settings', {
theme: 'dark',
version: 3
}));
INDEXEDDB обеспечивает максимальную масштабируемость и используется как первый выбор при автоматическом выборе драйвера.
localForage использует механизм fallback-цепочки, основанный на доступности драйверов в браузере. Типичный порядок:
Этот порядок отражает эволюцию технологий:
При инициализации библиотека проверяет поддержку каждого драйвера и выбирает первый доступный вариант.
Пример конфигурации с явным порядком:
localforage.config({
driver: [
localforage.INDEXEDDB,
localforage.WEBSQL,
localforage.LOCALSTORAGE
],
name: 'app_storage',
storeName: 'keyvalue_pairs'
});
Метод setDriver принимает одну или несколько констант и
задаёт активный механизм хранения.
При передаче массива осуществляется последовательная попытка инициализации:
localforage.setDriver([
localforage.INDEXEDDB,
localforage.WEBSQL
]);
Логика выполнения:
Каждая константа представляет собой строковый идентификатор драйвера внутри localForage:
INDEXEDDB → 'asyncStorage' (IndexedDB
wrapper)WEBSQL → 'webSQLStorage'LOCALSTORAGE → 'localStorageWrapper'Эти значения используются внутри фабрики драйверов для регистрации и выбора реализации.
Несмотря на единый интерфейс localForage, поведение операций зависит от выбранного драйвера.
localForage позволяет проверять поддержку каждого механизма через
supports():
localforage.supports(localforage.INDEXEDDB);
localforage.supports(localforage.WEBSQL);
localforage.supports(localforage.LOCALSTORAGE);
Возвращаемое значение определяет, можно ли использовать соответствующий драйвер в текущей среде.
Использование INDEXEDDB, WEBSQL и LOCALSTORAGE как явных констант позволяет:
Выбор конкретного драйвера напрямую влияет на архитектуру persistence-слоя, особенно в приложениях с офлайн-режимом, кэшированием и локальными базами данных.