Проверка текущего состояния драйвера

В библиотеке localForage работа со хранилищем строится вокруг абстракции драйверов: IndexedDB, WebSQL и localStorage. Каждый драйвер представляет собой отдельную реализацию одного и того же API, а библиотека автоматически выбирает наиболее подходящий вариант. Это приводит к необходимости контролировать текущее состояние выбранного драйвера и понимать, какой механизм хранения фактически используется в конкретный момент выполнения приложения.

Состояние драйвера можно рассматривать как совокупность следующих параметров:

  • активный драйвер (тот, который реально используется сейчас);
  • доступность драйвера в окружении браузера;
  • результат fallback-выбора при недоступности предпочтительного варианта;
  • корректная инициализация после асинхронной загрузки.

Получение текущего активного драйвера

Основной способ определить, какой драйвер используется в данный момент, — обратиться к состоянию экземпляра localForage.

localforage.driver();

Метод возвращает идентификатор текущего драйвера. В зависимости от конфигурации это может быть:

  • localStorageWrapper
  • asyncStorage (IndexedDB)
  • webSQLStorage

Фактически это строковое имя внутренней реализации, которое отражает выбранный механизм хранения.


Проверка после инициализации (ready-состояние)

Выбор драйвера в localForage происходит асинхронно. До завершения инициализации результат обращения к состоянию может быть нестабильным. Поэтому ключевым элементом контроля является состояние готовности библиотеки.

localforage.ready().then(() => {
  const driver = localforage.driver();
});

Метод ready() гарантирует, что:

  • выбран и активирован подходящий драйвер;
  • завершены все внутренние проверки поддержки;
  • конфигурация экземпляра применена.

Игнорирование этого этапа приводит к ситуации, когда полученный драйвер может не отражать реальное состояние системы.


Определение поддержки конкретного драйвера

Перед принудительным переключением или диагностикой важно проверить, поддерживается ли конкретный драйвер в текущей среде.

localforage.supports(localforage.INDEXEDDB);

Метод возвращает логическое значение, отражающее возможность использования указанного хранилища.

Типовые значения констант:

  • localforage.INDEXEDDB
  • localforage.WEBSQL
  • localforage.LOCALSTORAGE

Этот механизм позволяет заранее определить, будет ли драйвер доступен, без попытки его активации.


Получение объекта драйвера без активации

Иногда требуется не переключение, а только анализ реализации драйвера.

localforage.getDriver(localforage.INDEXEDDB).then(driver => {
  console.log(driver);
});

Этот метод возвращает сам драйвер как модуль, содержащий низкоуровневые методы хранения. Он полезен для:

  • отладки;
  • анализа внутренней реализации;
  • построения кастомных стратегий переключения.

Важно, что getDriver не изменяет активный драйвер и не влияет на текущее состояние localForage.


Сравнение состояния до и после setDriver

Принудительная смена драйвера осуществляется через асинхронный метод:

localforage.setDriver(localforage.INDEXEDDB);

После выполнения важно повторно проверить состояние:

localforage.setDriver(localforage.LOCALSTORAGE).then(() => {
  console.log(localforage.driver());
});

Типичная последовательность контроля состояния включает:

  1. Проверку поддержки (supports)
  2. Установку драйвера (setDriver)
  3. Подтверждение активного драйвера (driver)
  4. Ожидание завершения инициализации (ready при необходимости)

Типичные сценарии изменения состояния драйвера

Автоматический fallback

При недоступности 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
  };
}

Такая проверка позволяет:

  • определить реальный активный драйвер;
  • понять, какие альтернативы доступны;
  • выявить причину fallback-поведения.

Особенности интерпретации состояния

Следует учитывать, что значение driver() не всегда напрямую совпадает с ожиданиями конфигурации. Возможны ситуации:

  • IndexedDB указан в конфигурации, но переключение произошло на localStorage;
  • браузер ограничивает доступ к persistent storage;
  • режим приватного просмотра блокирует IndexedDB;
  • WebView реализует частичную поддержку API.

Поэтому состояние драйвера всегда является результатом компромисса между конфигурацией и возможностями окружения.


Связь состояния драйвера с жизненным циклом приложения

Состояние драйвера не является статичным. Оно формируется на этапе инициализации и может изменяться при:

  • вызове setDriver;
  • повторной конфигурации localForage;
  • повторной инициализации экземпляра;
  • изменении условий среды (например, переход в другой режим браузера в некоторых WebView).

Контроль через ready() и повторная проверка через driver() являются базовым механизмом синхронизации логики приложения с фактическим состоянием хранилища.