Подробный анализ трех общих способов создания DOM в JS и лучший подход.
Я предоставлю 3 способа создания больших DOM, их плюсы и минусы, и, конечно же,самый оптимизированный способ создания больших DOM и почему.Суть в том, что при создании DOM в js нативные методы 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 ;
Плюсы: - Самое быстрое время выполнения в Firefox / Chrome / IE / Safari (от 3 до 5 миллисекунд в браузерах) .Измеряется с помощью API performance.now () и console.time ().
Минусы: - Когда количество столбцов больше и вам нужно установить много атрибутов, тогда работа со строками может стать немного труднее и менее сложной.tenable.
2-й способ: собственный Js document.createElement () (это 2-й лучший подход с точки зрения производительности во всех браузерах)
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);
Плюсы: - 2-е самое быстрое время выполнения в Firefox / Chrome / Safari (от 5 до 12 миллисекунд в браузерах) .Измеряется с помощью API performance.now () и console.time ().- Больше возможностей, чем у первого подхода
Минусы: - Время выполнения больше в браузерах IE, 90 + миллисекунда
3-й способ: использование 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