Ich möchte ungefähr 35000 Objekte im Objektspeicher meiner IndexedDB speichern. Ich verwende den folgenden Code zum Einfügen.Einfügen großer Mengen in die Objectstore-Blöcke von 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
};
});
});
};
Der obige Code funktioniert gut, aber Looping und ~ 35000 Einfügen von Objekten über macht die Benutzeroberfläche nicht mehr reagiert für ~ 200 Sekunden. Ich dachte, ich könnte vielleicht WebWorker benutzen, aber IndexedDB ist in WebWorker nicht verfügbar. Ich habe versucht, einen Weg zu finden, Massen einzufügen, konnte keinen finden. Haben Sie Ideen, wie Sie große Mengen von Objekten einfügen können, ohne die Benutzeroberfläche zu blockieren?
Vorerst ich das Array bin Aufspaltung in [chunks] (http://stackoverflow.com/questions/ 8495687/split-array-in-chunks) von 500 und mit [setInterval] (http://www.kryogenix.org/days/2009/07/03/not-blocking-the-ui-in-tight-javascript- Schleifen) anstelle von for loop. Jetzt reagiert die Benutzeroberfläche etwas besser als zuvor. – surya