У меня есть определенное веб-приложение, которое полагается на загрузку большого количества строк данных из локального файла на стороне клиента. Цель состоит в том, чтобы сохранить эти данные в indexeddb.
Данные содержат только два интересующих меня столбца, каждый из которых содержит строку символов длиной не более 25 символов, однако может содержать до 1 миллиона строк.
Читая много вопросов и документов, я создал код, который, кажется, работает при создании indexeddb с меньшими наборами данных ниже 20000 строк, но разбивается на большие данные.
Я уверен, что это из-за плохого дизайна, так как я новичок в этом стиле работы, или, возможно, из-за зависания в браузере Chrome - поскольку я не получаю никаких сообщений об ошибках, я могу вызвать оповещение о том, что достигнут последний цикл for, однако on.complete никогда не срабатывает, и база данных никогда не отображается как
Ввод функции e - чтение файла.
Я также выполняю операцию с данными в цикле for, но я удалил это для простоты.
function storeDataEnc (e) {
var lines = e.target.result.split('\n');
var request = self.indexedDB.open('DB', 1);
request.onerror = function(e) {
console.log("there was and error:" +e.target.errorCode);
}
request.onupgradeneeded = function(e){
var db = request.result;
var store = db.createObjectStore("col1", {
keyPath: "col2"} );
};
request.onsuccess = function(e) {
var db = request.result;
var tx = db.transaction("dataTable", "readwrite");
var store = tx.objectStore("dataTable");
db.onerror = function(e){
console.log("ERROR" + e.target.errorCode);
}
for (var i = 0; i < lines.length; ++i) {
var test = lines.length - 1;
if (i == test) {console.log('nearly done')};
function forEachLinenow (match) {
if ( match.charAt( 0 ) != '#' ) {
match = match.trim();
var fields = match.split('\t');
var col1in = fields[0];
var col2in = fields[3];
store.put({ COL1: col1in, COL2: col2in }
}
forEachLinenow(lines[i] + '\n');
}
tx.oncomplete = function() {
db.close();
alert("all data read");
}
}
}
Полагаю, я не понимаю какой-то проблемы с браузером, чтобы мешать вредоносным приложениям занимать слишком много ресурсов. Кто-нибудь использовал данные такого размера, кто может обнаружить ошибку в моем процессе.
Думаю, мне может понадобиться сгенерировать несколько транзакций, которые я пытался, но, похоже, не изменил мою проблему.
Я знаю, что это может быть медленно, однако сама скорость не самая большая проблема, если данные успешно переносятся.