Idb-keyval — это минималистичная библиотека для работы с
IndexedDB в JavaScript, обеспечивающая простую асинхронную работу с
ключ-значение хранилищем. Несмотря на свою простоту, она наследует все
ограничения и особенности самой IndexedDB, так как является лишь
обёрткой над ней.
Объем доступного хранилища напрямую зависит от браузера и платформы. IndexedDB не накладывает строгого лимита на размер базы данных, однако существуют практические ограничения, связанные с безопасностью и производительностью:
Math.min(0.6 * свободное место, 2 ГБ), где 0.6 — это
максимальная доля, которую сайт может использовать без запроса
разрешения.Важно учитывать, что Idb-keyval не контролирует эти
лимиты напрямую — ошибки при переполнении базы данных будут
выбрасываться из IndexedDB, например
QuotaExceededError.
IndexedDB поддерживает хранение объектов любого размера в пределах доступной квоты, однако на практике:
Blob или File, чтобы избежать чрезмерного
потребления памяти при сериализации.Idb-keyval автоматически сериализует объекты с помощью
structuredClone, что позволяет хранить сложные структуры
данных, но не снижает размер самого объекта в
IndexedDB.
Idb-keyval поддерживает любые данные, которые
поддерживает IndexedDB:
string, number,
boolean, null, undefined.Date, Blob, File,
ArrayBuffer и TypedArray.structuredClone, но при этом объекты сериализуются, что
может влиять на производительность при больших данных.Не поддерживаются функции, DOM-элементы, циклические
ссылки внутри объектов (если использовать старые браузеры без
полноценного structuredClone).
DataError.Idb-keyval автоматически конвертирует ключи в допустимые форматы, но в сложных случаях рекомендуется вручную нормализовать ключи (например, сериализовать объект в JSON).
Все операции Idb-keyval выполняются в асинхронных
транзакциях типа readwrite или
readonly:
setMany или группировать операции внутри одной транзакции,
чтобы минимизировать количество открытых транзакций.При превышении квоты IndexedDB выбрасывает ошибки, которые Idb-keyval передает вызывающему коду:
QuotaExceededError — превышена максимальная доступная
квота для сайта.UnknownError или AbortError — возможны при
нестандартных сбоях транзакции.Реакция на эти ошибки должна быть встроена в код приложения,
например, через обработку try/catch или через
Promise.catch для асинхронных методов.
Firebase).store) для уменьшения риска переполнения.Blob для хранения больших файлов вместо
сериализованных JSON.QuotaExceededError.del или
clear, чтобы освободить пространство.Эти ограничения формируют фундаментальное понимание поведения Idb-keyval, позволяя эффективно управлять локальным хранилищем и строить надежные приложения, не сталкиваясь с неожиданными сбоями при переполнении или работе с большими объектами.