Отличия idb-keyval от полноценной библиотеки idb

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 даёт полный контроль над хранилищем, позволяя строить сложные структуры данных и управлять транзакциями, но требует большего объёма кода и понимания внутренней архитектуры браузерного хранилища.