Ответ
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 оборачивают в нормальные промисы, и жить сразу легче становится. Не геройствуй, используй готовое, а то охуеешь.