【发布时间】:2012-05-15 08:26:19
【问题描述】:
我想在我的 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,但 IndexedDB 在 WebWorkers 中不可用。我试图找到一种批量插入的方法,但找不到。关于如何在不阻塞 UI 的情况下插入大量对象的任何想法?
【问题讨论】:
-
现在我将数组拆分为 500 个 chunks 并使用 setInterval 而不是 for 循环。现在 UI 的响应比以前好一点。
-
所以我知道这是旧的,但只是想知道是否有人在 Web 工作者中使用 IndexedDB 的更新,因为它现在受支持?
标签: javascript google-chrome-extension indexeddb