Библиотека localForage реализует абстракцию над различными механизмами хранения данных в браузере. В основе этой абстракции лежит система драйверов, позволяющая переключаться между IndexedDB, WebSQL и localStorage без изменения прикладного кода. Понимание того, какой драйвер активен в конкретный момент времени, критично при отладке, оптимизации и построении предсказуемого поведения приложения.
Метод driver() используется для получения текущего
активного драйвера экземпляра localForage. Он возвращает идентификатор
драйвера, который был выбран системой или установлен вручную через
конфигурацию.
localForage опирается на концепцию взаимозаменяемых хранилищ:
При инициализации библиотека выбирает наиболее предпочтительный доступный драйвер в зависимости от окружения. Этот выбор можно переопределить явно, но в любом случае итоговый результат фиксируется внутри экземпляра.
driver() как инструмент диагностикиМетод driver() возвращает строковый идентификатор
текущего драйвера. Примеры возможных значений:
'indexedDB''webSQLStorage''localStorageWrapper'Использование метода позволяет определить, какой механизм хранения фактически активен:
import localForage from "localforage";
(async () => {
await localForage.setItem("key", "value");
const currentDriver = localForage.driver();
console.log(currentDriver);
})();
Результат зависит от среды выполнения и конфигурации.
driver() с конфигурацией экземпляраВыбор драйвера может быть задан явно через конфигурацию:
localForage.config({
driver: [
localForage.INDEXEDDB,
localForage.WEBSQL,
localForage.LOCALSTORAGE
]
});
В этом случае библиотека будет перебирать драйверы в указанном
порядке до первого успешного. После успешной инициализации текущий
драйвер фиксируется, и именно его возвращает driver().
Особенность заключается в том, что метод не возвращает массив предпочтений, а только фактически активный механизм.
Важная деталь заключается в моменте вызова driver():
null или
неопределённое значение в зависимости от реализацииПример корректного ожидания готовности:
await localForage.ready();
const driverName = localForage.driver();
console.log(driverName);
Метод ready() гарантирует, что драйвер уже выбран и
инициализирован.
Использование driver() выходит за рамки простой
диагностики. Оно применяется в нескольких сценариях:
Разные драйверы имеют различную производительность и ограничения:
Определение драйвера позволяет изменять стратегию работы:
const driver = localForage.driver();
if (driver === localForage.LOCALSTORAGE) {
console.warn("Используется синхронное хранилище, возможны блокировки UI");
}
В крупных приложениях важно фиксировать, какой механизм хранения был выбран автоматически:
async function initStorage() {
await localForage.ready();
console.log("Storage driver:", localForage.driver());
}
Это особенно важно при поддержке кросс-браузерности и мобильных устройств.
Если IndexedDB недоступен, библиотека может перейти на
fallback-драйвер. Проверка через driver() позволяет
отследить такие случаи:
if (localForage.driver() !== localForage.INDEXEDDB) {
console.warn("Произошёл переход на менее эффективный драйвер");
}
driver() от
setDriver()Важно различать получение текущего драйвера и его установку.
driver() — возвращает активный драйверsetDriver() — устанавливает конкретный драйвер
вручнуюawait localForage.setDriver(localForage.INDEXEDDB);
console.log(localForage.driver());
После вызова setDriver() значение, возвращаемое
driver(), изменяется соответствующим образом.
Поведение метода зависит от окружения:
Возвращается 'indexedDB', так как это приоритетный и
наиболее производительный вариант.
Может быть выбран 'webSQLStorage' или
'localStorageWrapper'.
Некоторые браузеры ограничивают IndexedDB, и драйвер может автоматически деградировать.
Метод driver() не предоставляет:
Он отражает только текущее активное состояние, без контекста выбора.
const driver = localForage.driver();
Такой вызов до ready() может дать некорректный
результат. Корректный подход требует ожидания инициализации.
Разработчики иногда предполагают, что драйвер не может измениться во время работы. На практике он фиксируется после инициализации, но до этого момента возможен переход между вариантами.
Использование только IndexedDB как предположения может привести к
ошибкам логики. Проверка через driver() позволяет избежать
некорректных допущений.
Внутри localForage драйвер представляет собой объект-обёртку, реализующий единый интерфейс:
Метод driver() возвращает не объект, а строковый
идентификатор, что упрощает сериализацию состояния и логирование.
В архитектурных слоях метод часто применяется для:
Пример архитектурного разделения:
async function getStorageStrategy() {
await localForage.ready();
switch (localForage.driver()) {
case localForage.INDEXEDDB:
return "high-capacity";
case localForage.LOCALSTORAGE:
return "limited";
default:
return "legacy";
}
}
После того как драйвер выбран, повторный вызов config()
не всегда приводит к немедленному изменению результата
driver(). Для смены драйвера требуется явный вызов
setDriver() или переинициализация экземпляра.
Метод driver() выполняет узкую, но критически важную
функцию — он фиксирует и раскрывает фактический механизм хранения,
выбранный системой в текущем окружении. Это позволяет строить устойчивую
логику поверх абстракции хранения данных, не зависящую от конкретной
реализации браузера.