С точки зрения производительности, вам лучше всего использовать третий вариант - динамическое создание элементов DOM. Во-первых, потому что ответ сервера будет меньше и, следовательно, быстрее, и, во-вторых, производительность JavaScript будет выше при создании объектов.
Глядя на производительность, когда вам просто нужно вставить элементы на страницу, сравнивая это:
element.appendChild(document.createElement("div"));
к этому:
element.innerHTML = "<div></div>";
innerHTML быстрее. Однако, когда вам нужны ссылки на внедренные элементы, сравните это:
var child = element.appendChild(document.createElement("div"));
к этому:
element.innerHTML = "<div id=\"" + childId + "\"></div>";
var child = document.getElementById(childId);
createElement выигрывает конкурс производительности.
Поскольку вам нужны ссылки на элементы, вы получите более высокую производительность, извлекая JSON с сервера и создавая элементы.
При этом вы можете добиться максимальной производительности, создавая только те элементы, на которые вам нужны ссылки, и вставляя html в другое место. Например, для этого HTML:
<div>
<div class="a">Item A</div>
<div class="b">Item B</div>
</div>
Если вам нужна только ссылка на родительский элемент <div>
, а не на его дочерние элементы, то вместо динамического создания дочерних элементов создайте динамический родительский элемент <div>
, а затем установите его innerHTML для содержимого:
var item = serverObject[i];
var el = parent.appendChild(document.createElement("div"));
el.innerHTML = "<div class=\"" +
item.A.className + "\">" +
item.A.text + "</div><div class=\"" +
item.B.className + "\">" +
item.B.text + "</div>";
Таким образом, вы получаете лучшее из обоих миров с точки зрения производительности.
Редактировать - Добавление информации за пределы производительности
С точки зрения архитектуры, мне не нравится, когда службы много знают о клиенте, только данные, которые он предоставляет. Таким образом, если вы решите изменить свой пользовательский интерфейс, вам не нужно связываться со службой, чтобы заставить ее выплевывать другой HTML. Кроме того, если вы обнаружите, что хотите использовать те же данные в другом месте, у вас уже есть служба, которую вы можете использовать повторно.