В библиотеке localForage работа со хранилищем строится вокруг абстракции драйверов: IndexedDB, WebSQL и localStorage. Каждый драйвер представляет собой отдельную реализацию одного и того же API, а библиотека автоматически выбирает наиболее подходящий вариант. Это приводит к необходимости контролировать текущее состояние выбранного драйвера и понимать, какой механизм хранения фактически используется в конкретный момент выполнения приложения.
Состояние драйвера можно рассматривать как совокупность следующих параметров:
Основной способ определить, какой драйвер используется в данный момент, — обратиться к состоянию экземпляра localForage.
localforage.driver();
Метод возвращает идентификатор текущего драйвера. В зависимости от конфигурации это может быть:
localStorageWrapperasyncStorage (IndexedDB)webSQLStorageФактически это строковое имя внутренней реализации, которое отражает выбранный механизм хранения.
Выбор драйвера в localForage происходит асинхронно. До завершения инициализации результат обращения к состоянию может быть нестабильным. Поэтому ключевым элементом контроля является состояние готовности библиотеки.
localforage.ready().then(() => {
const driver = localforage.driver();
});
Метод ready() гарантирует, что:
Игнорирование этого этапа приводит к ситуации, когда полученный драйвер может не отражать реальное состояние системы.
Перед принудительным переключением или диагностикой важно проверить, поддерживается ли конкретный драйвер в текущей среде.
localforage.supports(localforage.INDEXEDDB);
Метод возвращает логическое значение, отражающее возможность использования указанного хранилища.
Типовые значения констант:
localforage.INDEXEDDBlocalforage.WEBSQLlocalforage.LOCALSTORAGEЭтот механизм позволяет заранее определить, будет ли драйвер доступен, без попытки его активации.
Иногда требуется не переключение, а только анализ реализации драйвера.
localforage.getDriver(localforage.INDEXEDDB).then(driver => {
console.log(driver);
});
Этот метод возвращает сам драйвер как модуль, содержащий низкоуровневые методы хранения. Он полезен для:
Важно, что getDriver не изменяет активный драйвер и не
влияет на текущее состояние localForage.
Принудительная смена драйвера осуществляется через асинхронный метод:
localforage.setDriver(localforage.INDEXEDDB);
После выполнения важно повторно проверить состояние:
localforage.setDriver(localforage.LOCALSTORAGE).then(() => {
console.log(localforage.driver());
});
Типичная последовательность контроля состояния включает:
supports)setDriver)driver)ready при
необходимости)При недоступности IndexedDB библиотека автоматически переключается на альтернативу:
localforage.config({
driver: [localforage.INDEXEDDB, localforage.LOCALSTORAGE]
});
После этого состояние драйвера может отличаться от предпочтительного
списка. Проверка через driver() показывает фактически
выбранный вариант.
Если требуется жёсткое закрепление:
localforage.setDriver(localforage.LOCALSTORAGE);
После этого состояние драйвера становится детерминированным, что важно для окружений с ограничениями (например, приватные режимы браузера или устаревшие WebView).
Для анализа поведения системы обычно комбинируются несколько методов.
async function inspectDriver() {
await localforage.ready();
const current = localforage.driver();
const supportsIDB = localforage.supports(localforage.INDEXEDDB);
const supportsWebSQL = localforage.supports(localforage.WEBSQL);
const supportsLS = localforage.supports(localforage.LOCALSTORAGE);
return {
current,
supportsIDB,
supportsWebSQL,
supportsLS
};
}
Такая проверка позволяет:
Следует учитывать, что значение driver() не всегда
напрямую совпадает с ожиданиями конфигурации. Возможны ситуации:
Поэтому состояние драйвера всегда является результатом компромисса между конфигурацией и возможностями окружения.
Состояние драйвера не является статичным. Оно формируется на этапе инициализации и может изменяться при:
setDriver;Контроль через ready() и повторная проверка через
driver() являются базовым механизмом синхронизации логики
приложения с фактическим состоянием хранилища.