日期:2014-05-16  浏览次数:20290 次

javascript几种操作表格方法的性能对比

?

本文转自:http://hi.baidu.com/jz1108/blog/item/81ebe6b4561c247b8ad4b2ef.html

?

一日,同事说他习惯用inserRow和insertCell方法操作table元素,并说这个效率要比createElement和appendChild来的高。我不信,于是做了如下试验:使用不同方式创建一个1000行X10列的表格,对比代码所耗时间。
???
方法一:使用insertRow和insertCell

var table = document.createElement("table");
document.body.appendChild(table);
for (var i = 0; i < 1000; i ++){
	var row = table.insertRow(table.rows.length);
	for (var j = 0; j < 10; j ++){
		var cell = row.insertCell(row.cells.length);
		cell.innerHTML = "(" + i + ", " + j + ")";
	}
}

以上代码执行时间为:172.688秒,整个过程中CPU占用率飙升到100%,IE也进入装死的状态。


方法二:使用createElement和appendChild

var table = document.createElement("table");
document.body.appendChild(table);
var tbody = document.createElement("tbody");
table.appendChild(tbody);
for (var i = 0; i < 1000; i ++){
	var row = document.createElement("tr");
	tbody.appendChild(row);
	for (var j = 0; j < 10; j ++){
		var cell = document.createElement("td");
		cell.innerHTML = "(" + i + ", " + j + ")";
		row.appendChild(cell);
	}
}

以上代码执行时间为:3.026秒,速度提高这么多。

?

当然这还不是最快的,请看方法三:

var htmls = [];
htmls.push("<table>");
for (var i = 0; i < 1000; i ++){
	htmls.push("<tr>")
	for (var j = 0; j < 10; j ++){
		htmls.push("<td>(" + i + ", " + j + ")</td>");
	}
	htmls.push("</tr>");
}
htmls.push("</table>");
document.getElementById("div1").innerHTML = htmls.join("");

这段代码执行时间是0.281秒。

?

可见使用innerHTML方式是最快的,createElement和appendhChild其次,最慢的是insertRow和insertCell。