В библиотеке localForage выбор механизма хранения данных строится на абстракции драйверов. Каждый драйвер — это адаптер к конкретному API браузера: IndexedDB, WebSQL или localStorage. При этом ключевым аспектом работы становится сценарий, при котором выбранный или предпочтительный драйвер оказывается недоступным в текущей среде исполнения.
Недоступность драйвера не рассматривается как фатальная ошибка системы хранения. Архитектура localForage ориентирована на деградацию функциональности и автоматический переход к альтернативным механизмам, если они заранее указаны или поддерживаются окружением.
Ситуации, при которых драйвер считается недоступным, разнообразны и зависят от браузера, режима работы и ограничений среды:
Каждый драйвер в localForage обязан реализовать метод проверки совместимости. Эта проверка используется до фактического переключения на драйвер.
Перед установкой драйвера выполняется проверка его пригодности для
текущей среды. Она реализуется через метод supports.
Внутри каждого драйвера определяется логика вида:
indexedDB,
openDatabase, localStorage);Если хотя бы один критический критерий не выполняется, драйвер считается неподдерживаемым.
Результат проверки влияет на дальнейшую цепочку инициализации: неподдерживаемый драйвер исключается из активного набора.
При использовании setDriver поведение становится более
строгим. Если драйвер указан явно, localForage пытается установить его
без автоматического перебора альтернатив.
Возможны следующие сценарии:
Драйвер поддерживается Установка проходит успешно, дальнейшие операции используют выбранный механизм.
Драйвер не поддерживается Возникает отклонение промиса. Инициализация прекращается, если не предусмотрена обработка fallback-логики на уровне приложения.
Частичная поддержка В некоторых окружениях API присутствует, но функционально нестабилен (например, приватный режим Safari). В этом случае драйвер может формально пройти проверку, но операции записи будут завершаться ошибками.
При указании массива драйверов через конфигурацию
setDriver([...]) активируется механизм последовательного
выбора.
Алгоритм работы:
supports.Если ни один драйвер не проходит проверку, создаётся состояние неинициализированного хранилища. В этом случае все операции чтения и записи начинают возвращать ошибки.
Если в окружении не поддерживается ни один драйвер, поведение становится детерминированно ошибочным:
setItem, getItem,
removeItem возвращают отклонённые промисы;Типичная ошибка в таких сценариях связана с кодом
InvalidStateError или аналогичными сообщениями,
указывающими на отсутствие активного драйвера.
localStorage часто используется как последний fallback-уровень. Его особенности:
Однако недоступность localStorage также возможна:
В таких случаях fallback-цепочка обрывается окончательно.
localForage работает через асинхронную инициализацию. Ключевым элементом является состояние готовности, которое формируется после выбора драйвера.
До завершения инициализации возможны следующие эффекты недоступности:
Если драйвер не может быть выбран, состояние ready
никогда не достигает положительного результата, что отражается в
постоянных отклонениях операций.
Приватные режимы представляют отдельный класс проблем:
В таких условиях localForage может:
Некоторые сценарии недоступности драйвера проявляются не на этапе инициализации, а при выполнении операций:
QuotaExceededError при превышении лимита;TransactionInactiveError в IndexedDB при сбоях
транзакций;SecurityError при ограничениях доступа.В таких случаях драйвер считается нестабильным, но не обязательно исключается автоматически. Поведение зависит от конкретной реализации адаптера и точки возникновения ошибки.
localForage не выполняет автоматическое переключение драйвера после его установки. Это означает:
Это принципиально отличает систему от полностью адаптивных storage-абстракций, где переключение происходит прозрачно.
Некоторые реализации localForage и связанные окружения могут кэшировать результаты проверки поддержки драйверов. Это влияет на поведение следующим образом:
При работе внутри iframe с ограничениями sandbox доступ к storage API может быть заблокирован:
localForage в таких условиях ведёт себя как в полностью неподдерживаемой среде: драйверы исключаются на этапе проверки или проваливаются при первой операции.
Поведение при недоступности драйвера можно свести к трёхуровневой модели:
Проверка поддержки Драйвер либо допускается, либо исключается до использования.
Инициализация Выбранный драйвер становится активным, формируется состояние готовности.
Исполнение операций При скрытых ограничениях ошибки проявляются в момент чтения или записи.
Эта модель объясняет, почему недоступность драйвера может проявляться как на этапе конфигурации, так и в процессе работы приложения.
Поведение localForage при недоступности драйвера определяется сочетанием статической проверки и динамических ошибок выполнения. Отсутствие универсального автоматического переключения в runtime приводит к тому, что устойчивость системы зависит от корректного определения доступных драйверов на этапе инициализации и адекватной настройки порядка их использования.