流星,语义UI进度,同时大csv文件解析
问题描述:
我想解析Meteor应用程序中的大csv文件,并显示语义UI进度组件的进展。但它冻结并只显示最终结果。在浏览器中流星,语义UI进度,同时大csv文件解析
Template.ordersImport.events({
'click button': function (e) {
e.preventDefault();
Papa.parse($('#importedFile')[0].files[0], {
delimiter: ';',
newline: '\n',
header: true,
fastMode: true,
complete: function (result) {
$('form').hide();
$('#progress').show();
var totalSize = result.data.length;
_.each(result.data, function (item, index) {
var progress = (index + 1)/totalSize * 100;
$('#progress').progress({
percent: progress
});
});
}
});
}
});
答
代码在一个线程中运行,所以即使你更新进度变量,它不会呈现到用户界面,直到完成文件的解析。
在用户界面中执行冗长的处理不是很好的做法 - 它变得没有响应,并且可能会导致浏览器崩溃,尤其是对于大型文件。
我建议将文件传递到服务器,并在那里进行处理。
https://forums.meteor.com/t/how-to-use-web-worker/17511
,如果你想保持处理在浏览器中
How to run an unblocking background task in a Meteor/JavaScript client?
使用工作线程和更新UI在'step'功能这个答案可能帮助了。 – MasterAM
工作线程在Meteor中不起作用(harrison_papa-parse.js?hash = af12d7c ...&papaworker:14 Uncaught ReferenceError:包没有定义) –
你是对的。该工作人员不在Meteor包中工作,因为它全部捆绑到一个文件中,但可以修改库代码,以便将工作人员函数(作为字符串)内联,将其放入“公共目录”或等待Meteor支持WebWorker构建目标(有人建议,不确定它会发生)。你仍然可以使用'step'函数,但是(如果你不使用worker,它仍会阻塞)。 – MasterAM