Tôi muốn lưu một số ~ 35000 đối tượng trong đối tượng IndexedDB của tôi. Tôi đang sử dụng mã dưới đây để chèn.Chèn số lượng lớn vào khối đối tượng của IndexedDB UI
AddListings = function (x2j_list_new, callback) {
var transaction = db.transaction(["listings"], IDBTransaction.READ_WRITE);
var count = 0;
transaction.oncomplete = function (event) {
if (callback) {
console.log('x2jShowListing Added ' + count + '/' + x2j_list_new.length);
callback([count, x2j_list_new.length]);
}
};
transaction.onerror = function (e) {
console.log("myError: ", e);
if (callback) {
callback(false);
}
};
var store = transaction.objectStore("listings");
$.each(x2j_list_new, function (index0, item0) {
var request = store.put(item0);
request.onsuccess = function (event) {
count++;
// event.target.result
};
});
});
};
Mã trên hoạt động tốt, nhưng lặp lại và chèn hơn 35000 đối tượng khiến giao diện người dùng không phản hồi trong ~ 200 giây. Tôi nghĩ có lẽ tôi có thể sử dụng WebWorkers, nhưng IndexedDB không có sẵn bên trong WebWorkers. Tôi cố gắng tìm cách chèn số lượng lớn, không thể tìm thấy. Bất kỳ ý tưởng nào về cách chèn số lượng lớn các đối tượng mà không chặn giao diện người dùng?
Để bây giờ tôi đang tách mảng trong [khối] (http://stackoverflow.com/questions/ 8495687/split-array-into-chunks) 500 và sử dụng [setInterval] (http://www.kryogenix.org/days/2009/07/03/not-blocking-the-ui-in-tight-javascript- vòng lặp) thay vì cho vòng lặp. Bây giờ giao diện người dùng đáp ứng tốt hơn so với trước đây. – surya