Определение области действия в транзакциях IndexedDB

Что такое 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 .

Другие источники:

Так что до следующего раза... продолжайте продвигать сеть на ближние территории.