Я работаю над веб-приложением для анализа CSV, которое собирает данные, а затем использует его для рисования графика графика. Пока это работает хорошо, но, к сожалению, для анализа файлов CSV с папапарсом требуется некоторое время, хотя они всего лишь около 3 МБ.Настройка индикатора прогресса Para с веб-работниками
Так что было бы неплохо продемонстрировать определенный прогресс, когда «папа» работает. Я мог бы пойти на дешевый скрытый div, показывая «Я работаю», но предпочел бы использовать <progress>
.
К сожалению, бар просто обновляется ПОСЛЕ завершения папы. Поэтому я попытался войти в webworkers и использовать рабочий файл для расчета прогресса, а также установить worker: true
в конфигурации Papa Parses. Все равно нет.
Используемые конфигурации (с шагом функцией) является, как следует:
var papaConfig =
{
header: true,
dynamicTyping: true,
worker: true,
step: function (row) {
if (gotHeaders == false) {
for (k in row.data[0]) {
if (k != "Time" && k != "Date" && k != " Time" && k != " ") {
header.push(k);
var obj = {};
obj.label = k;
obj.data = [];
flotData.push(obj);
gotHeaders = true;
}
}
}
tempDate = row.data[0]["Date"];
tempTime = row.data[0][" Time"];
var tD = tempDate.split(".");
var tT = tempTime.split(":");
tT[0] = tT[0].replace(" ", "");
dateTime = new Date(tD[2], tD[1] - 1, tD[0], tT[0], tT[1], tT[2]);
var encoded = $.toJSON(row.data[0]);
for (j = 0; j < header.length; j++) {
var value = $.evalJSON(encoded)[header[j]]
flotData[j].data.push([dateTime, value]);
}
w.postMessage({ state: row.meta.cursor, size: size });
},
complete: Done,
}
конфигурация работник на основном сайте:
var w = new Worker("js/workers.js");
w.onmessage = function (event) {
$("#progBar").val(event.data);
};
и вызываемый работник:
onmessage = function(e) {
var progress = e.data.state;
var size = e.data.size;
var newPercent = Math.round(progress/size * 100);
postMessage(newPercent);
}
Индикатор выполнения обновляется, но только после того, как файл CSV разобран и сайт настроен с данными, поэтому работа er, но ответ обрабатывается после разбора. Папа-парс, похоже, тоже называется у рабочего. Или, похоже, если проверять вызовы в средствах отладки браузеров, но все же сайт не отвечает, пока не появятся все данные.
Может ли кто-нибудь указать мне на то, что я сделал неправильно или где отрегулировать код, чтобы получить рабочий индикатор выполнения? Думаю, это также углубило бы мое понимание веб-работников.