Механизм driver определяет, какой backend используется
для хранения данных внутри localForage. Библиотека абстрагирует доступ к
различным браузерным хранилищам и предоставляет единый API поверх
нескольких технологий:
Параметр driver управляет тем, какой из этих механизмов
будет использоваться как основной или единственный.
Внутри библиотеки реализован слой абстракции, который выбирает подходящий storage backend. По умолчанию используется стратегия приоритетов:
driver позволяет:
configlocalForage.config({
driver: localForage.INDEXEDDB
});
или множественный список с приоритетом:
localForage.config({
driver: [
localForage.INDEXEDDB,
localForage.WEBSQL,
localForage.LOCALSTORAGE
]
});
В таком случае библиотека будет пытаться использовать драйверы строго в указанном порядке.
setDriverlocalForage.setDriver(localForage.INDEXEDDB);
Метод возвращает Promise и позволяет динамически переключать backend:
localForage.setDriver(localForage.WEBSQL)
.then(() => {
// driver установлен
})
.catch((err) => {
// выбранный driver недоступен
});
В localForage доступны предопределённые идентификаторы:
localForage.INDEXEDDBlocalForage.WEBSQLlocalForage.LOCALSTORAGEКаждый из них соответствует конкретной реализации storage API браузера.
При установке одного конкретного driver:
localForage.setDriver(localForage.LOCALSTORAGE);
fallback-поведение отключается. Если выбранный backend недоступен, операция завершается ошибкой.
Перед установкой драйвера библиотека выполняет проверку:
Если проверка не проходит, Promise отклоняется.
Наиболее распространённый сценарий:
localForage.config({
driver: [
localForage.INDEXEDDB,
localForage.WEBSQL,
localForage.LOCALSTORAGE
]
});
Логика работы:
Такой подход обеспечивает максимальную совместимость между браузерами и устройствами.
IndexedDB обеспечивает:
В localForage именно IndexedDB рассматривается как основной driver для современных браузеров.
Однако поведение может отличаться:
WebSQL используется как legacy-решение:
При явном выборе:
localForage.setDriver(localForage.WEBSQL);
возможны ошибки в браузерах без поддержки WebSQL.
localStorage — самый простой backend:
При использовании driver:
localForage.setDriver(localForage.LOCALSTORAGE);
все данные сериализуются в строки, что может влиять на производительность при больших объектах.
В приложениях с ограниченным стеком (например, WebView):
localForage.setDriver(localForage.LOCALSTORAGE);
Используется гарантированно доступный механизм.
В приложениях с большими данными:
localForage.setDriver(localForage.INDEXEDDB);
Фиксация IndexedDB исключает fallback на менее производительные варианты.
В корпоративных приложениях:
Типовые проблемы:
Error: No available storage method found
Возникает, если ни один driver не подходит.
Часто встречается в Safari Private Mode при IndexedDB.
Возникает при использовании localStorage driver при переполнении лимита.
localForage позволяет менять backend во время выполнения:
async function switchToIndexedDB() {
try {
await localForage.setDriver(localForage.INDEXEDDB);
} catch (e) {
await localForage.setDriver(localForage.LOCALSTORAGE);
}
}
Такой подход применяется при адаптации к окружению после runtime-диагностики.
Driver напрямую влияет на способ хранения:
Это отражается на:
Внутренняя логика часто строится по принципу:
Повторный вызов:
localForage.config({
driver: localForage.LOCALSTORAGE
});
может:
В localForage это считается тяжёлой операцией и обычно выполняется один раз при старте приложения.
Driver-логика учитывает:
Поведение driver становится ключевым фактором стабильности работы storage слоя в разных средах.