Что такое IndexedDB?
DOM и браузер
IndexedDB — это встроенная в браузер база данных для хранения больших объёмов структурированных данных на клиенте с асинхронным API и поддержкой индексов.
Особенности
- Большой объём — сотни МБ и больше (в отличие от ~5 МБ у localStorage).
- Структурированные данные — хранит объекты (не только строки), включая файлы/блобы.
- Асинхронный API — не блокирует основной поток (в отличие от синхронного localStorage).
- Индексы — быстрый поиск по полям.
- Транзакции — атомарные операции.
- Хранит по origin.
Модель
- Database → Object Stores (аналог таблиц) → записи (объекты) с ключами.
- Поиск по ключу или индексу.
const request = indexedDB.open('myDB', 1);
request.onupgradeneeded = (e) => {
e.target.result.createObjectStore('users', { keyPath: 'id' });
};
request.onsuccess = (e) => {
const db = e.target.result;
const tx = db.transaction('users', 'readwrite');
tx.objectStore('users').add({ id: 1, name: 'Ann' });
};API низкоуровневый — часто используют обёртки (idb, Dexie.js).
Где применяют
- Офлайн-приложения (PWA), кеш больших наборов данных, хранение файлов, черновики.
IndexedDB против localStorage
- localStorage — простой, синхронный, ~5 МБ, только строки.
- IndexedDB — сложный, асинхронный, большой объём, структурированные данные и индексы.
Коротко для собеседования
IndexedDB — клиентская БД для больших объёмов структурированных данных: асинхронная, с индексами и транзакциями, хранит объекты и файлы. Для офлайна (PWA) и кеша. Сложнее localStorage — часто используют обёртки (idb, Dexie).