idb-keyval представляет собой легковесную обёртку
над IndexedDB, упрощая работу с хранилищем ключ-значение в браузере. В
отличие от полноценной библиотеки idb, которая
предоставляет полный доступ к возможностям IndexedDB, idb-keyval
ориентирована на минимальный и удобный API, позволяющий быстро сохранять
и получать данные без необходимости работы с транзакциями, курсорами и
схемой баз данных.
Принцип работы
- idb-keyval оперирует только парами
ключ-значение. Каждое значение сохраняется в отдельной записи и
автоматически сериализуется в JSON при сохранении. Это значит, что
сложные структуры данных, такие как объекты и массивы, сохраняются и
извлекаются без дополнительного преобразования.
- idb предоставляет низкоуровневый доступ к хранилищу
IndexedDB. Работа с транзакциями, объектными хранилищами и индексами
требует явного создания схемы базы данных и управления курсорами для
чтения и записи данных.
API и синтаксис
idb-keyval имеет минималистичный API:
set(key, value) — сохраняет значение под указанным
ключом.
get(key) — извлекает значение по ключу.
del(key) — удаляет запись по ключу.
clear() — очищает все данные.
keys() — возвращает массив всех ключей. Эти методы
возвращают промисы, что делает их удобными для асинхронной работы.
idb требует использования методов
transaction, objectStore и
get/put для операций с данными. Например,
сохранение данных требует явного создания транзакции с нужной областью
прав (readonly или readwrite), а извлечение
значения — обращения к объектному хранилищу и обработку промисов
транзакции.
Масштабируемость и контроль
- idb-keyval ограничен хранением ключ-значение и не
предоставляет механизмов работы с индексами, курсорами или схемой базы
данных. Это делает его идеальным для небольших проектов, где не
требуется сложная структура данных.
- idb позволяет создавать несколько объектных
хранилищ, индексы, использовать транзакции для атомарных операций и
управлять версиями базы данных. Это важно для крупных приложений, где
требуется структурированное хранение данных и высокая степень контроля
над операциями.
Размер и зависимость
- idb-keyval имеет минимальный размер — около 1–2 КБ,
что позволяет подключать её даже в лёгкие веб-приложения без
значительного увеличения бандла.
- idb — более тяжёлая библиотека, размер которой
увеличивается с добавлением всех возможностей работы с IndexedDB. Она
предоставляет гораздо больше функционала, но за счёт этого требует
больше кода и времени на освоение.
Использование транзакций
- В idb-keyval транзакции скрыты внутри методов
библиотеки. Разработчику не нужно создавать или коммитить транзакции
вручную; операции
set, get и del
выполняются атомарно по ключу.
- В idb управление транзакциями полностью ручное.
Разработчик определяет тип транзакции (
readonly или
readwrite), создаёт её и явно вызывает методы объекта
transaction для выполнения операций. Это обеспечивает
полный контроль над процессом, но требует дополнительного понимания
внутренней работы IndexedDB.
Случаи использования
idb-keyval подходит для:
- Кэшей небольших данных в приложении.
- Сохранения пользовательских настроек.
- Лёгких офлайн-данных без сложной структуры.
idb подходит для:
- Комплексных приложений с множественными объектными хранилищами.
- Хранения больших объёмов структурированных данных.
- Создания сложных индексов и фильтрации с использованием
курсоров.
- Управления версиями базы данных и миграцией схем.
Итоговое различие
Главное отличие заключается в уровне абстракции и
масштабируемости. idb-keyval
фокусируется на простоте и скорости внедрения с минимальным кодом,
скрывая все сложности IndexedDB. idb даёт полный
контроль над хранилищем, позволяя строить сложные структуры данных и
управлять транзакциями, но требует большего объёма кода и понимания
внутренней архитектуры браузерного хранилища.