Вставка больших количеств в IndexedDB& #39; интерфейс блоков хранилища объектов

Я хочу сохранить некоторые ~35000 объектов в моем хранилище объектов IndexedDB. Я использую приведенный ниже код для вставки.

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 секунд. Я подумал, может быть, я могу использовать WebWorkers, но IndexedDB недоступен внутри WebWorkers. Я пытался найти способ массовой вставки, не смог его найти. Любые идеи о том, как вставлять большое количество объектов, не блокируя пользовательский интерфейс?

19
задан surya 6 May 2012 в 15:30
поделиться