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.
  • Секреты не в клиентских хранилищах.