【发布时间】:2015-03-09 09:24:53
【问题描述】:
我在一个教程网站上找到了这个 jquery 函数,该函数接受 csv 文件输入并将其制表。我尝试提供一个大的 csv 文件(10,000KB),但我的浏览器崩溃了。我看到有一个名为 papa 的解析器库来处理这个问题,但是有没有其他方法可以防止我的浏览器在执行此操作时崩溃?
以下是相关代码:-
$("#upload").bind("click", function () {
var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.csv|.txt)$/;
if (regex.test($("#fileUpload").val().toLowerCase())) {
var reader = new FileReader();
reader.onload = function (e) {
var table = $("<table id='mytable' class='table table-striped table-bordered'/>");
var rows = e.target.result.split("\n");
text1=e.target.result;
var csvString = $.trim(text1);
var csvRows = csvString.split(/\n/);
var csvHeaders = csvRows.shift().split(';');
var headerstr=String(csvHeaders);
var count = (headerstr.match(/,/g) || []).length+1;
for (var i = 0; i < rows.length; i++) {
var row = $("<tr />");
var cells = rows[i].split(",");
for (var j = 0; j < count; j++) {
if(cells[j]){
var cell = $("<td/>");
cell.html(cells[j]);
}
else{
var cell = $("<td class='info'/>");
cell.html("empty");}
row.append(cell);
}
table.append(row);
}
$("#dvCSV").html('');
$("#dvCSV").append(table);
}
});
如何在不使浏览器崩溃的情况下实现此功能?提前致谢。
【问题讨论】:
-
尝试使用分析器(Chrome 的开发工具有一个)并找出占用所有内存的原因。我很确定 for 循环中的那些
vars 特别糟糕。 -
嗨@Sergiu ..删除for循环内的变量没有帮助。我正在使用 firefox .. :( 我只需要这个功能完好无损,但不会让我的浏览器崩溃
-
我并没有说删除循环内的
vars 可以解决这个问题。我的意思是这样做会特别消耗内存。您正在做 很多 其他对内存和 CPU 效率不高的事情。在循环内重复构建相同的 HTML 结构也很糟糕。尝试在循环之外构建它,只在其中注入数据,然后将其附加到 DOM。还要尝试一次添加一批表格行,而不是一次添加一个。 jQuery 知道$(element).append([list of nodes])并使用文档片段对其进行优化。 -
重点是事件,尽管 PapaParse 处理您负责显示它的数据。如果我是你,我会首先考虑分页。如果分页不正常,那么你真的需要优化你的 jQuery 代码。
-
嗨。我明白。我必须重写此代码以在 for 循环之外重新创建 html。您能否用一段支持代码添加您的建议作为解决方案?
标签: javascript jquery csv