В архитектуре localForage ключевую роль играет стадия инициализации
хранилища, которая обеспечивает корректную настройку драйвера,
подготовку пространства данных и синхронизацию состояния экземпляра.
Метод _initStorage относится к внутреннему слою и отвечает
за запуск и конфигурацию хранилища до того, как становятся доступны
публичные операции чтения и записи.
Метод _initStorage реализует механизм первичной
инициализации экземпляра хранилища. Его основная задача заключается в
том, чтобы привести объект storage к рабочему состоянию с учётом:
Фактически _initStorage выступает как точка сборки всей
инфраструктуры доступа к данным.
Первым шагом выполняется проверка, был ли экземпляр уже инициализирован. Это важно для предотвращения повторной настройки одного и того же storage-инстанса.
Внутренне используется флаг состояния, который позволяет различать:
Если инициализация уже завершена, метод возвращает ранее созданный promise или готовое состояние.
На следующем этапе происходит объединение конфигурационных параметров:
createInstance;Ключевые параметры, влияющие на _initStorage:
driver — предпочтительный тип хранилища;name — имя базы данных или namespace;storeName — имя таблицы/объекта хранения;version — версия схемы (актуально для IndexedDB);size — лимиты хранилища (для WebSQL);description — метаданные базы.Результатом является финализированный конфигурационный объект, используемый на следующих этапах.
Метод _initStorage инициирует проверку доступности всех
зарегистрированных драйверов. Обычно список включает:
Для каждого драйвера выполняется проверка:
Результатом становится список доступных драйверов, отсортированный по приоритету.
Если пользователь явно указал драйвер, _initStorage
пытается использовать его. В противном случае применяется стратегия
автоматического выбора.
Логика выбора:
Если ни один драйвер не подходит, инициализация завершается ошибкой.
После выбора драйвера выполняется его загрузка и инициализация. На этом этапе:
getItem,
setItem, removeItem и др.).Каждый драйвер реализует собственную стратегию инициализации, но интерфейс унифицирован.
Одной из ключевых особенностей localForage является асинхронность
всех операций. До завершения _initStorage любые вызовы к
API не блокируются, а помещаются в очередь.
В рамках метода:
Это обеспечивает консистентность при вызовах до полной готовности storage.
После успешного завершения всех этапов экземпляр помечается как готовый.
Внутренне это включает:
ready = true;С этого момента storage считается полностью активным.
Метод _initStorage включает несколько уровней обработки
ошибок:
Возникают при отсутствии API (например, IndexedDB в старых окружениях). В этом случае происходит переход к следующему драйверу.
Могут быть вызваны:
Возникают при некорректных параметрах (например, недопустимое имя store).
При критических сбоях инициализация завершается с reject и соответствующим сообщением.
Метод _initStorage является фундаментом жизненного цикла
экземпляра localForage:
_initStorage.Без успешного выполнения этого метода невозможна работа публичного API.
Драйверная архитектура localForage строится вокруг унифицированного
интерфейса. _initStorage выполняет роль связующего слоя
между ядром библиотеки и конкретной реализацией хранения данных.
Взаимодействие включает:
Это позволяет абстрагировать различия между IndexedDB, WebSQL и localStorage.
Одной из ключевых характеристик _initStorage является
полностью асинхронная модель работы.
Особенности:
Такая модель обеспечивает предсказуемое поведение даже при сложных сценариях загрузки приложения.
Метод опирается на несколько внутренних компонентов:
Совместная работа этих компонентов формирует устойчивую систему инициализации.
Если _initStorage вызывается повторно:
Это предотвращает гонки состояния и дублирование подключения к хранилищу.