Xác định phạm vi trong các giao dịch IndexedDB

IndexedDB là gì?

IndexedDB là một tiêu chuẩn web đang phát triển để lưu trữ một lượng lớn dữ liệu có cấu trúc trong trình duyệt và để tìm kiếm hiệu suất cao trên dữ liệu này bằng cách sử dụng chỉ mục. Nói cách khác, IndexedDB là một kho lưu trữ đối tượng. Cơ sở dữ liệu này không giống như cơ sở dữ liệu quan hệ, trong đó có các bảng chứa các hàng và cột của bộ sưu tập. Đây là một điểm khác biệt quan trọng và cơ bản ảnh hưởng đến cách bạn thiết kế và xây dựng ứng dụng (tìm hiểu thêm về – các khái niệm cơ bản.

Vậy có gì mới?

Các thay đổi bạn bè của tôi... chúng ta có một số thay đổi sẽ gây ra lỗi nếu chúng ta không xử lý bằng cách thay đổi cú pháp đơn giản.

Kể từ phiên bản 17 trở đi, Chrome sẽ gửi lỗi nếu một giao dịch IndexedDB không nằm trong phạm vi của kho đối tượng. Vì tất cả hoạt động đọc và ghi dữ liệu đều được thực hiện trong các giao dịch, nên chúng ta cần tạo một giao dịch trên cơ sở dữ liệu, chỉ định phạm vi (chẳng hạn như kho đối tượng mà bạn muốn truy cập) và xác định loại quyền truy cập (chỉ đọc hoặc ghi).

Điều này có ý nghĩa gì trong mã? Thay vì truyền một mảng trống vào database.transaction:

var transaction = db.transaction([], IDBTransaction.READ_ONLY);

Bạn nên đặt phạm vi cho một kho đối tượng cụ thể hoặc danh sách các kho đối tượng:

// 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);

Bạn có thể tăng tốc truy cập dữ liệu bằng cách sử dụng phạm vi và chế độ phù hợp trong giao dịch. Sau đây là một số mẹo: Khi xác định phạm vi, chỉ chỉ định các kho đối tượng mà bạn cần. Bằng cách này, bạn có thể chạy đồng thời nhiều giao dịch có phạm vi không trùng lặp. Chỉ chỉ định chế độ giao dịch READ_WRITE khi cần thiết. Bạn có thể chạy đồng thời nhiều giao dịch READ_ONLY có phạm vi trùng lặp, nhưng bạn chỉ có thể có một giao dịch READ_WRITE cho một kho đối tượng.

Các nguồn khác:

Vậy hẹn gặp lại các bạn trong lần sau... hãy tiếp tục đẩy web đến các lãnh thổ lân cận.