intermediate
IndexedDB
Храните крупные структурированные клиентские данные через object stores, indexes, transactions, version upgrades и async-доступ.
IndexedDB — браузерная БД для крупных структурированных клиентских данных. Object stores, indexes, transactions, cursors и версионные миграции схемы. Асинхронен и подходит для offline-очередей и кэшей, но API и lifecycle обновлений требуют обработки ошибок и плана миграций.
const request = indexedDB.open('app', 2);
request.onupgradeneeded = (event) => {
const db = event.target.result;
if (!db.objectStoreNames.contains('outbox')) {
db.createObjectStore('outbox', { keyPath: 'id' });
}
};
Только одна вкладка завершает upgrade версии; остальные блокируются. Миграции делайте идемпотентными и показывайте blocked-состояние.
На интервью: когда IndexedDB лучше localStorage и почему upgrade блокирует открытые вкладки.
Типовые ошибки: IndexedDB как серверная БД ведёт к переусложнению; игнор blocked upgrades даёт устаревшие схемы.
Компромисс: удобство против контроля — выбирайте механизм под вашу связность и бюджет производительности.
Чеклист:
- Transactions для согласованности.
- Версионные миграции в onupgradeneeded.
- Обработка blocked и versionchange.
- Секреты не в клиентских хранилищах.