IndexedDB のオブジェクトストアに ~35000 個のオブジェクトを保存したいと考えています。以下のコードを使用して挿入しています。
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
};
});
});
};
上記のコードは問題なく動作しますが、35000 個以上のオブジェクトをループして挿入すると、UI が 200 秒間応答しなくなります。WebWorkers を使用できるのではないかと思ったのですが、WebWorkers 内で IndexedDB を使用することはできません。一括挿入する方法を見つけようとしましたが、見つかりませんでした。UI をブロックせずに大量のオブジェクトを挿入する方法のアイデアはありますか?