定義 IndexedDB 交易中的範圍

Ido Green

什麼是 IndexedDB?

IndexedDB 是一種不斷演進的網頁標準,可在瀏覽器中儲存大量結構化資料,並使用索引針對這類資料進行高效能搜尋。換句話說,IndexedDB 是物件儲存庫。這與關聯資料庫不同,後者包含有資料列和資料欄的資料表。這項差異相當重要,也是影響您設計及建構應用程式的方式的根本原因 (詳情請參閱「基本概念」一文)。

那麼有什麼新功能呢?

變更內容,我的好友... 我們有一些變更會在未透過簡單的語法變更處理時發生錯誤。

自 17 版起,如果 IndexedDB 交易的範圍未指定為物件儲存庫,Chrome 就會擲回錯誤。由於所有資料讀取和寫入作業都會在交易中完成,因此我們需要在資料庫上建立交易、指定範圍 (例如要存取的物件儲存庫),並決定存取類型 (只讀或寫入)。

在程式碼中代表什麼意思?那麼,請不要將空陣列傳遞至 database.transaction:

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 交易。

其他來源:

下次見!