来源:https://blog.51cto.com/jeoff/225188
使用Javascript动态创建表格,不同的方法,巨大的运行时间差异! 本来是想测试一下使用Javascript生成一个比较大的表格,大概需要多长时间,一直认为这会是一个比较固定的时间。期间用了几种不同的方法,发现效率相差太大了。下面是测试的具体说明: 目标:生成一个2000*5的表格,每个单元格的内容是行号+逗号+列号 方法一:使用createElement生成表格,使用insertRow和insertCell方法生成行列,单元格的内容使用innerHTML属性进行填充。 方法二:使用createElement生成表格,使用CreateElement方法生成行列,单元格的内容使用了createTextNode方法填充。 方法三:拼接表格innerHTML属性的字符串,使用字符串 += 操作符链接字符串 方法四:拼接表格innerHTML属性的字符串,各个字符串追加数组里面,最后调用数组的join方法生成目标字符串。 运行时间比较: 方法 运行时间(ms) 方法一 93037 方法二 3341 方法三 2795 方法四 500 具体的程序如下: <html> <head> <title>test page</title> <script type='text/javascript'> <!-- function createTable() { var t = document.createElement('table'); for (var i = 0; i < 2000; i++) { var r = t.insertRow(); for (var j = 0; j < 5; j++) { var c = r.insertCell(); c.innerHTML = i + ',' + j; } } document.getElementById('table1').appendChild(t); t.setAttribute('border', '1'); } function createTable2() { var t = document.createElement('table'); var b = document.createElement('tbody'); for (var i = 0; i < 2000; i++) { var r = document.createElement('tr'); for (var j = 0; j < 5; j++) { var c = document.createElement('td'); var m = document.createTextNode(i + ',' + j); c.appendChild(m); r.appendChild(c); } b.appendChild(r); } t.appendChild(b); document.getElementById('table1').appendChild(t); t.setAttribute('border', '1'); } function createTable3() { var data = ''; data += '<table border=1><tbody>'; for (var i = 0; i < 2000; i++) { data += '<tr>'; for (var j = 0; j < 5; j++) { data += '<td>' + i + ',' + j + '</td>'; } data += '</tr>'; } data += '</tbody><table>'; document.getElementById('table1').innerHTML = data; } function createTable4() { var data = new Array(); data.push('<table border=1><tbody>'); for (var i = 0; i < 2000; i++) { data.push('<tr>'); for (var j = 0; j < 5; j++) { data.push('<td>' + i + ',' + j + '</td>'); } data.push('</tr>'); } data.push('</tbody><table>'); document.getElementById('table1').innerHTML = data.join(''); } function showFunctionRunTime(f) { var t1 = new Date(); f(); var t2 = new Date(); alert(t2 - t1); } //--> </script> </head> <body> <div id="table1" style="border: 1px solid black"> </div> <script> showFunctionRunTime(createTable); showFunctionRunTime(createTable2); showFunctionRunTime(createTable3); showFunctionRunTime(createTable4); </script> </body> </html>