Есть много переменных. # 1 может быть быстрее, при условии, что ваш JavaScript не собирает полученный результат по частям и при условии, что данные заметно меньше, чем эквивалентная разметка. Если вы собираете результат по частям или если данные не намного меньше разметки, это может быть медленнее. Это также зависит от скорости сетевого подключения пользователя от скорости его процессора и браузера (Chrome довольно быстрый, IE7 довольно медленный) и т. Д.
По частям: например, если вы загружаете таблицу из 200 строк и строите строки следующим образом:
// ...stuff that initializes `tableBody` and clears out old stuff...
for (index = 0; index < stuff.length; ++index) {
tr = $("tr");
tr.append("td").html(stuff[i].a);
tr.append("td").html(stuff[i].b);
tr.append("td").html(stuff[i].c);
tableBody.append(tr);
}
... тогда это, вероятно, будет довольно медленно по сравнению с тем, как браузер будет проходить через эквивалентную разметку.
Если, однако, вы делаете это примерно так:
markup = [];
for (index = 0; index < stuff.length; ++index) {
markup.push("<tr>");
markup.push("<td>" + stuff[i].a + "</td>");
markup.push("<td>" + stuff[i].b + "</td>");
markup.push("<td>" + stuff[i].c + "</td>");
markup.push("</tr>");
}
tableBody.append(markup.join(""));
... вы в лучшей форме, потому что там вы получаете максимальное повторное использование благодаря способности браузера быстро анализировать HTML (что, по сути, то, что делают браузеры и для чего они оптимизированы).
На первый взгляд может показаться немного нелогичным, что создание строки и ее передача в браузер может быть быстрее (даже заметно быстрее), чем построение структуры напрямую с помощью методов DOM или jQuery. Но чем больше вы думаете об этом, тем более очевидно (и да, я проверил это ), почему это так. DOM - это абстракция, которую браузер должен сопоставить со своими внутренними структурами, и каждый вызов метода DOM пересекает пограничный слой между JavaScript и механизмом DOM браузера. В отличие от этого, добавление в массив выполняется быстро, join
- быстро (даже в современных браузерах быстрое совпадение строк). Передача в браузере полной строки сводит к минимуму количество поездок между слоями и позволяет браузеру создавать свои внутренние структуры напрямую, не беспокоясь об их эквивалентах DOM (до тех пор, пока вы не попросите их позже). Последний раз я проверял это пару лет назад, и результаты были впечатляющими. Я должен попробовать это снова с текущими браузерами; хотя сегодня нет времени ...