В localForage работа с хранилищами строится вокруг абстракции драйверов: IndexedDB, WebSQL и localStorage. По умолчанию библиотека использует стратегию выбора с fallback-механизмом, при котором сначала проверяется поддержка более современных механизмов, а затем происходит откат к более простым.
Однако во многих архитектурах требуется полностью исключить автоматический выбор и зафиксировать один конкретный драйвер. Это важно в случаях, когда:
Библиотека хранит список доступных драйверов и перебирает их в порядке приоритета:
При использовании стандартной конфигурации этот список используется как очередь: первый доступный драйвер становится активным.
Явное указание одного драйвера полностью отключает эту модель очереди.
Наиболее распространённый способ — задать параметр
driver в config:
import localforage from "localforage";
localforage.config({
driver: localforage.INDEXEDDB
});
В этом случае библиотека:
Технически API допускает передачу массива драйверов, где может быть указан только один элемент:
localforage.config({
driver: [localforage.WEBSQL]
});
Такой подход формально оставляет структуру fallback-логики, но фактически она не используется, поскольку альтернативных вариантов нет.
Метод setDriver применяется для смены активного драйвера
после инициализации:
localforage.setDriver(localforage.LOCALSTORAGE);
Или в виде массива:
localforage.setDriver([localforage.LOCALSTORAGE]);
Поведение в этом режиме:
Внутри localForage используются предопределённые идентификаторы:
localforage.INDEXEDDB
localforage.WEBSQL
localforage.LOCALSTORAGE
Эти значения являются строковыми идентификаторами, которые библиотека использует для регистрации и выбора backend-реализации.
Фиксация одного драйвера радикально меняет поведение системы:
Если выбранный драйвер недоступен:
После успешной инициализации:
getItem, setItem,
removeItem работают через один backend;Разные драйверы имеют различные характеристики:
Фиксация драйвера позволяет управлять этими характеристиками напрямую, без автоматического переключения.
В корпоративных приложениях иногда требуется гарантировать использование только IndexedDB:
localforage.config({
driver: localforage.INDEXEDDB
});
Причина — исключение различий между браузерами и предотвращение неожиданных деградаций до localStorage.
В средах, где IndexedDB может быть нестабилен, фиксируется WebSQL:
localforage.setDriver(localforage.WEBSQL);
Это позволяет сохранить совместимость со старыми WebView или legacy-браузерами.
localStorage является синхронным механизмом. При необходимости строгого контроля можно явно задать его:
localforage.config({
driver: localforage.LOCALSTORAGE
});
Это может использоваться в очень простых приложениях, где асинхронность не критична.
При принудительном выборе одного backend часто возникают типовые проблемы:
Возникает, если выбранный драйвер недоступен в окружении:
Особенно характерно для localStorage:
При неправильной работе транзакций:
Важно учитывать, что установка драйвера должна происходить до начала операций:
localforage.config({
driver: localforage.INDEXEDDB,
name: "app_storage"
});
await localforage.setItem("key", "value");
Если драйвер задаётся после первых операций, поведение может стать непредсказуемым из-за уже созданного инстанса хранилища.
| Метод | Поведение | Когда применяется |
|---|---|---|
| config({ driver }) | задаёт драйвер при инициализации | начальная настройка |
| setDriver() | переключает уже созданный инстанс | динамическое управление |
| массив из одного драйвера | формально fallback, фактически фиксация | совместимость API |
Жёсткое закрепление драйвера в localForage приводит к следующим архитектурным последствиям:
Взамен теряется автоматическая адаптация к возможностям платформы, что делает систему более жёстко привязанной к конкретной реализации хранения.