Desidero salvare circa ~ 35000 oggetti nell'oggetore del mio IndexedDB. Sto usando sotto il codice da inserire.Inserimento di grandi quantità nei blocchi di oggetti di 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
};
});
});
};
Il codice sopra funziona bene, ma il ciclo e l'inserimento di più di ~ 35000 oggetti rende l'interfaccia utente non risponde per ~ 200 secondi. Ho pensato che forse potrei usare WebWorkers, ma IndexedDB non è disponibile all'interno di WebWorkers. Ho cercato di trovare un modo per inserire in blocco, non ho trovato uno. Qualche idea su come inserire grandi quantità di oggetti senza bloccare l'interfaccia utente?
Per ora sto dividendo la matrice in [pezzi] (http://stackoverflow.com/questions/ 8495687/split-array-in-chunks) di 500 e utilizzando [setInterval] (http://www.kryogenix.org/days/2009/07/03/not-blocking-the-ui-in-tight-javascript- loop) anziché per loop. Ora l'interfaccia utente risponde poco meglio di prima. – surya