私のIndexedDBのオブジェクトストアに〜35000個のオブジェクトを保存します。私は挿入するコードを以下に使用しています。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
};
});
});
};
上記のコードは正常に動作しますが、〜35000個のオブジェクトをループし、過挿入する〜200秒間、UIが応答しなくなります。おそらく私はWebWorkersを使うことができると思っていましたが、IndexedDBはWebWorkersでは利用できません。一括挿入する方法を見つけようとしましたが見つかりませんでした。 UIをブロックせずに大量のオブジェクトを挿入する方法のアイデアですか?
は(今私は[チャンク]で配列を分割していますについてhttp://stackoverflow.com/questions/ 8495687/split-array-into-chunks)を500に設定し、[setInterval](http://www.kryogenix.org/days/2009/07/03/not-blocking-the-ui-in-tight-javascript-ループ)の代わりに使用します。今やUIはこれまでよりも少し良く応答します。 – surya