Какой опыт работы с indexedDB

Ответ

IndexedDB — это низкоуровневая NoSQL база данных в браузере для хранения больших объемов структурированных данных. Работал с ним для оффлайн-доступа к данным, кэширования и сложных запросов.

Основные моменты:

  • Открытие базы через indexedDB.open(name, version) с обработкой onupgradeneeded для создания схемы.
  • Работа с транзакциями (readwrite, readonly) и хранилищами (objectStore).
  • Использование курсоров для итерации по данным и индексов для быстрого поиска.

Пример:

const request = indexedDB.open('myDB', 1);
request.onupgradeneeded = (e) => {
  const db = e.target.result;
  const store = db.createObjectStore('users', { keyPath: 'id' });
  store.createIndex('name', 'name', { unique: false });
};

Сложности:

  • Асинхронность и event-based API.
  • Обработка ошибок и версионирование.

Для удобства использовал библиотеки вроде idb или Dexie.js.

Ответ 18+ 🔞

А, IndexedDB, говоришь? Ну это ж, блядь, такая штука в браузере, типа низкоуровневой NoSQL базы, куда можно накидать овердохуища структурированных данных. Я с ней, сука, сталкивался, когда нужно было приложение заставить работать без интернета, кэш городить или сложные запросы, блядь, отфильтровать.

Короче, суть в чём:

  • Чтобы базу открыть, надо вызвать indexedDB.open(name, version). И вот тут главное — не проебать момент с onupgradeneeded. Это когда версию меняешь, блядь, и надо схему создать или обновить. Если пропустишь — пиши пропало, там ни хуя не будет работать.
  • Всё общение с базой идёт через транзакции, понимаешь? readwrite или readonly. И внутри них уже ковыряешься в хранилищах (objectStore).
  • Если нужно по всем данным пройтись — это тебе курсоры в помощь. А если быстро найти что-то по полю — индексы создавай, они, блядь, скорость поднимают.

Вот, смотри, как это выглядит в коде, простейший пример:

const request = indexedDB.open('myDB', 1);
request.onupgradeneeded = (e) => {
  const db = e.target.result;
  const store = db.createObjectStore('users', { keyPath: 'id' });
  store.createIndex('name', 'name', { unique: false });
};

А теперь про сложности, ёпта:

  • API у него, сука, асинхронный и событийный. Не как у нормальных людей с промисами, а через эти ваши onsuccess, onerror. Пока привыкнешь — мозг вытекает.
  • Ошибки обрабатывать — отдельная песня. И версионирование, блядь... чуть схему поменял — всё, лови апгрейд, пиши миграции, а то данные похеришь.

Честно, после пары таких проектов я взял да и подключил библиотеку, idb или Dexie.js. Они, сука, этот адский event-based API оборачивают в нормальные промисы, и жить сразу легче становится. Не геройствуй, используй готовое, а то охуеешь.