详细的分析更多的阅读。
我公司将提供3种方式创建大型DOM和他们的优点和缺点,以及课程的大型DOM创建,为什么最优化的方式。 底线是在js中创建DOM时,原生JS和DOM方法是你的朋友,除非没有其他方式(不太可能),否则不要使用jquery。
用于比较的测试数据:创建400行,5列并附加到DOM。 testData是您以json形式从后端获取以创建表的对象的列表。
附加执行时间的测试结果快照不同浏览器的 HTML
<div id="employeeListContainer1"></div>
<table id="employeeList2">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Title</th>
<th>ID</th>
<th>Department</th>
</tr>
</thead>
1路:字符串连接(最优化的方式在不同浏览器的性能方面)
var tableElementContainer1 = document.getElementById("employeeListContainer1"),
temptableHolder = '<table><thead><tr><th>First Name</th><th>Last Name</th><th>Title</th><th>ID</th><th>Department</th></tr></thead><tbody>';
for(var i=0,len=testData.length; i<len; i++){
temptableHolder += '<tr><td>' + testData[i].firstName + '</td><td>' + testData[i].lastName + '</td><td>' + testData[i].title
+ '</td><td>' + testData[i].id + '</td><td>' + testData[i].department + '</td></tr>';
}
temptableHolder += '</tbody></table>';
tableElementContainer1.innerHTML = temptableHolder ;
优点: - 跨火狐/铬/ IE/Safari浏览器最快执行时间(3到5毫秒跨浏览器)。通过performance.now()和console.time()API测量。
缺点: - 当列数更多,并且需要设置很多属性时,使用字符串可能会变得困难并且不太主要。
第二个办法:本地的js使用document.createElement()(这是在不同的浏览器性能方面第二好的办法)
var tableBody = document.createElement('tbody'),
tableElement2 = document.getElementById("employeeList2"),
for(var i=0,len=testData.length; i<len; i++){
tableRow = document.createElement("tr");
for(var k in testData[i]){
rowCell = document.createElement("td");
rowCell.appendChild(document.createTextNode(testData[i][k]));
tableRow.appendChild(rowCell);
}
tableBody.appendChild(tableRow);
}
tableElement2.appendChild(tableBody);
优点: - 跨火狐/ Chrome的第二最快的执行时间/ Safari (跨浏览器5到12毫秒)。通过performance.now()和console.time()API测量。 - 比第一次进场主要站得住脚
缺点: - 执行时间是多在IE浏览器,90+ millsec
第三届方式:使用jQuery创建DOM(我的建议是不要“吨使用它)
var tableBody = $('<tbody></tbody>'),
tableElement2 = document.getElementById("employeeList2"),
for(var i=0,len=testData.length; i<len; i++){
tableRow = $("<tr></tr>");
for(var k in testData[i]){
rowCell = $("<td></td>");
rowCell.append(testData[i][k]);
tableRow.append(rowCell);
}
tableBody.append(tableRow);
}
tableElement2.append(tableBody);
优点: - 轻松的元素添加属性/班/款式和易于阅读和主要站不住脚。
缺点: - 在所有浏览器最差执行时间(220毫秒到330毫秒),最慢的数字是IE
这听起来像一个JS模板引擎的作业,如http:// handlebarsjs .com/- 不幸的是,我不太了解它为您提供真正的解决方案,但我认为它可能有帮助。 – Nix 2012-03-08 09:01:20
@Nix谢谢,一直在寻找一种方式来创建复杂的DOM元素,这种方式非常健全,易于维护。 handlebars.js正是我所需要的。 :) – DavidScherer 2014-04-11 19:45:18