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 cho việc lưu trữ một lượng đáng kể dữ liệu có cấu trúc trong trình duyệt và để tìm kiếm dữ liệu có hiệu suất cao 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 với cơ sở dữ liệu quan hệ có các bảng chứa hàng và cột của bộ sưu tập. Đây là đ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?

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

Từ phiên bản 17 trở đi, Chrome sẽ báo lỗi nếu giao dịch IndexedDB không nằm trong phạm vi kho lưu trữ đối tượng. Do tất cả việc đọc và ghi dữ liệu đều được thực hiện trong 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 lưu trữ đối tượng nào mà bạn muốn truy cập) và xác định loại truy cập (chỉ đọc hoặc ghi).

Điều này có nghĩa là gì trong mã? Thay vì chuyể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 vào một kho lưu trữ đối tượng cụ thể hoặc danh sách kho lưu trữ đố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, hãy chỉ xác định kho lưu trữ đố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 với phạm vi chồng chéo, nhưng bạn chỉ có thể có một giao dịch READ_WRITE cho một kho lưu trữ đối tượng.

Nguồn khác:

Vì vậy, cho đến lần tới... tiếp tục đưa web đến các lãnh thổ gần với các lãnh thổ.