Что такое IndexedDB?
IndexedDB — это развивающийся веб-стандарт для хранения значительных объемов структурированных данных в браузере и высокопроизводительного поиска по этим данным с использованием индексов. Другими словами, IndexedDB — это хранилище объектов. Это не то же самое, что реляционная база данных, в которой есть таблицы со строками и столбцами коллекций. Это важное и фундаментальное различие, которое влияет на способ проектирования и создания приложений (подробнее об основных понятиях) .
Так что же нового?
Изменения, друзья мои... у нас есть некоторые изменения, которые вызовут некоторые ошибки, если мы не обработаем их простым изменением синтаксиса.
Начиная с версии 17, Chrome теперь выдает ошибку, если транзакция IndexedDB не ограничена хранилищем объектов. Поскольку все чтение и запись данных выполняются внутри транзакций, нам необходимо создать транзакцию в базе данных, указать область действия (например, к каким хранилищам объектов вы хотите получить доступ) и определить тип доступа (только чтение или запись).
Что это означает в коде? Что ж, вместо того, чтобы передавать пустой массив в нашу базу данных.транзакция:
var transaction = db.transaction([], IDBTransaction.READ_ONLY);
Вам следует ограничиться конкретным хранилищем объектов или списком хранилищ объектов:
// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);
// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
IDBTransaction.READ_ONLY);
// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);
Вы можете ускорить доступ к данным, используя правильную область и режим транзакции. Вот несколько советов: При определении области указывайте только те хранилища объектов, которые вам нужны. Таким образом, вы можете одновременно выполнять несколько транзакций с непересекающимися областями. Режим транзакции READ_WRITE
указывайте только при необходимости. Вы можете одновременно выполнять несколько транзакций READ_ONLY
с перекрывающимися областями, но для хранилища объектов можно использовать только одну транзакцию READ_WRITE
.
Другие источники:
- Обновление на chromium.org
- Более подробная информация об IndexedDB на MDN
- Полный пример использования indexedDB в простом веб-приложении списка дел.
Так что до следующего раза... продолжайте продвигать сеть на ближние территории.