我正在开发一个 CSV 解析 Web 应用程序,它收集数据然后用它来绘制绘图图。到目前为止,它运行良好,但不幸的是,使用 papaparse 解析 CSV 文件需要一些时间,即使它们只有大约 3MB。
因此,当“爸爸”工作时,显示某种进展会很好。我可以选择便宜的隐藏 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文件并设置好数据之后,所以调用了worker,但是解析后处理了答案。Papa Parse 似乎也被称为工人。或者,如果检查浏览器调试工具中的调用,但站点仍然没有响应,直到所有数据都显示出来。
谁能指出我做错了什么,或者在哪里调整代码以获得工作进度条?我想这也会加深我对网络工作者的理解。