javascript42
Главная
Все учебники
Блог
Учебник localForage
Введение в localForage
Что такое localForage и зачем он нужен
Проблемы нативного localStorage
Как localForage решает задачу асинхронного хранилища
Поддерживаемые браузеры и среды выполнения
Обзор поддерживаемых драйверов: IndexedDB, WebSQL, localStorage
Приоритет выбора драйвера по умолчанию
Установка и подключение
Установка через npm и yarn
Подключение через CDN
Подключение в проект на CommonJS
Подключение в проект на ES-модулях
Подключение в браузере без сборщика
Проверка готовности библиотеки к работе
Базовые операции с данными
Метод setItem: сохранение значения
Метод getItem: получение значения
Метод removeItem: удаление записи
Метод clear: очистка хранилища
Метод length: количество записей
Метод key: получение ключа по индексу
Метод keys: получение всех ключей
Работа с Promise и async/await
Почему localForage работает асинхронно
Использование then/catch с методами
Использование async/await с методами
Обработка ошибок через try/catch
Цепочки промисов при последовательных операциях
Параллельное выполнение операций через Promise.all
Поддерживаемые типы данных
Строки и числа
Булевы значения и null
Объекты и массивы
Бинарные данные: ArrayBuffer
Бинарные данные: Blob
Бинарные данные: TypedArray
Ограничения и особенности сериализации
Что происходит с undefined, Date, Map, Set
Конфигурация и настройка
Метод config: глобальная настройка
Параметр name: имя базы данных
Параметр storeName: имя хранилища
Параметр version: версия базы данных
Параметр description: описание хранилища
Параметр size: размер для WebSQL
Параметр driver: явное указание драйвера
Порядок вызова config до первой операции
Управление драйверами
Как localForage выбирает драйвер автоматически
Явное указание одного драйвера
Указание списка драйверов с приоритетом
Метод setDriver: смена драйвера
Метод driver: получение текущего драйвера
Метод supports: проверка поддержки драйвера
Константы INDEXEDDB, WEBSQL, LOCALSTORAGE
Поведение при недоступности выбранного драйвера
Инициализация и готовность экземпляра
Метод ready: ожидание готовности хранилища
Событие ready и его особенности
Что происходит при вызове методов до готовности
Обработка ошибок инициализации
Проверка текущего состояния драйвера
Итерация по данным
Метод iterate: обход всех записей
Сигнатура колбэка iterate
Прерывание итерации возвратом значения
Получение результата из iterate
Отличие iterate от ручного обхода через keys и getItem
Производительность итерации при большом объёме данных
Работа с несколькими экземплярами хранилища
Метод createInstance: создание нового экземпляра
Параметры createInstance
Изоляция данных между экземплярами
Использование нескольких экземпляров в одном приложении
Именование и организация экземпляров
Уничтожение и очистка конкретного экземпляра
Кастомные драйверы
Интерфейс кастомного драйвера
Обязательные методы драйвера
Метод _initStorage
Метод defineDriver: регистрация кастомного драйвера
Метод _support: объявление поддержки
Порядок регистрации и подключения кастомного драйвера
Пример минимального кастомного драйвера
Отладка и тестирование кастомного драйвера
IndexedDB как основной драйвер
Архитектура IndexedDB в контексте localForage
Как localForage открывает и версионирует базу данных
Транзакции и их прозрачность для разработчика
Ограничения объёма хранилища в IndexedDB
Особенности работы в приватном режиме браузера
Отличия поведения IndexedDB в разных браузерах
WebSQL как запасной драйвер
Статус WebSQL: устаревший стандарт
Где WebSQL до сих пор актуален
Ограничения типов данных в WebSQL
Как localForage сериализует данные для WebSQL
Объём хранилища и запросы на расширение
localStorage как запасной драйвер
Когда localForage переходит на localStorage
Синхронная природа localStorage и асинхронная обёртка
Сериализация данных через JSON
Потери типов при сериализации в localStorage
Ограничение объёма и поведение при переполнении
Обработка ошибок и граничные случаи
Классификация возможных ошибок
Ошибки инициализации драйвера
Ошибки при превышении квоты хранилища
Поведение в приватном режиме и режиме инкогнито
Ошибки сериализации и десериализации
Потеря данных при смене драйвера
Стратегии восстановления после ошибок
Производительность и оптимизация
Стоимость операций чтения и записи по драйверам
Батчинг операций записи
Кеширование часто читаемых значений в памяти
Влияние размера значений на скорость работы
Ленивая загрузка данных из хранилища
Профилирование операций с хранилищем в DevTools
Безопасность и ограничения браузера
Политика одного источника и изоляция данных
Очистка данных браузером: условия и сценарии
Запрос постоянного хранилища через Storage API
Что хранить нельзя: чувствительные данные
Шифрование данных перед сохранением
Различия в квотах между браузерами и платформами
Использование в Node.js и серверном окружении
Ограничения localForage в Node.js
Полифилы и заглушки для серверного рендеринга
Паттерн проверки окружения перед использованием
Альтернативы для серверной стороны
Использование с фреймворками
Интеграция с React: хуки и паттерны
Интеграция с Vue: реактивность и хранилище
Интеграция с Angular: сервисы и DI
Использование совместно с Redux и Vuex
Персистентность состояния через localForage
Инициализация хранилища при старте приложения
Тестирование кода, работающего с localForage
Мокирование localForage в юнит-тестах
Использование jest-localstorage-mock и аналогов
Тестирование асинхронных операций
Очистка хранилища между тестами
Интеграционное тестирование с реальным IndexedDB
Эмуляция ошибок хранилища в тестах
Миграция и версионирование данных
Необходимость миграций при изменении структуры данных
Хранение версии схемы данных
Паттерн пошаговой миграции
Обратная совместимость при обновлении приложения
Удаление устаревших ключей и хранилищ
Риски при изменении параметра version в конфигурации
Сравнение с альтернативами
localForage против чистого IndexedDB
localForage против localStorage напрямую
localForage против Dexie.js
localForage против idb
localForage против PouchDB
Когда localForage — не лучший выбор
Справочник API
Полная сигнатура setItem
Полная сигнатура getItem
Полная сигнатура removeItem
Полная сигнатура clear
Полная сигнатура length
Полная сигнатура key
Полная сигнатура keys
Полная сигнатура iterate
Полная сигнатура config
Полная сигнатура setDriver
Полная сигнатура driver
Полная сигнатура supports
Полная сигнатура ready
Полная сигнатура createInstance
Полная сигнатура defineDriver