所以我必须渲染一个包含1000行和1000列的表。相应地这个link,似乎最好的方法是在javascript中构建HTML字符串,然后一次性将它插入到DOM中。我做了一个简单的例子,并将其与其他几种方法进行比较。最后,这是我出来的最快的方式。但这还不够令人满意。所以我的问题是,是否有比以下示例更快的方法。
var startTime = new Date().getTime(),
tableString = "<table>",
body = document.getElementsByTagName('body')[0],
div = document.createElement('div'),
finalResult = 0,
endTime = 0,
result = 0;
for (row = 0; row < 1000; row += 1) {
tableString += "<tr>";
for (col = 0; col < 1000; col += 1) {
tableString += "<td>" + "testing" + "</td>";
}
tableString += "</tr";
}
tableString += "</table>";
div.innerHTML = tableString;
body.appendChild(div);
endTime = new Date().getTime();
console.log(endTime - startTime);
答案 0 :(得分:2)
无论使用何种语言,大量的字符串连接都会让您陷入运行时的麻烦。 紧固方式是通过本机JavaScript DOM API,同时在文档片段中构建表。在函数结束时,将该文档片段插入文档中的所需位置。
这样的事情将创建一个包含1000行和每行20个单元格的表:
function makeTable() {
var fragment = document.createDocumentFragment();
for (var i = 0; i < 1000; i++) {
var row = document.createElement('tr');
fragment.appendChild(row);
for (var j = 0; j < 20; j++) {
var cell = document.createElement('td');
cell.appendChild(document.createTextNode(i.toString() + ', ' + j.toString()));
row.appendChild(cell);
}
}
var target = document.getElementById('target');
target.appendChild(fragment);
}
JSFiddle:http://jsfiddle.net/KbNLb/4/
编辑刚刚看到你做了1000x1000 - 这是一百万个细胞,无论如何都会很慢。我真的希望百万表格单元格不是你的实际用例。 ; - )