來源: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>