Я немного с обеих сторон, на самом деле:
- Когда на стороне javascript мне нужны данные , я использую JSON
- Когда на стороне javascript мне нужна презентация, по которой я не буду делать никаких вычислений, я обычно использую HTML
Основное преимущество использования HTML - это когда вы хотите заменить полную часть своей страницы тем, что возвращается из запроса Ajax:
- Перестроить часть страницы в JS (довольно) сложно
- У вас, вероятно, уже есть какой-то шаблонизатор на стороне сервера, который был использован для генерации страницы в первую очередь ... Почему бы не использовать его повторно?
Обычно я не принимаю во внимание аспекты производительности, по крайней мере на сервере:
- На сервере создание части HTML или некоторого JSON, вероятно, не будет иметь большого значения
- О размере материала, который проходит через сеть: ну, вы, вероятно, не используете сотни КБ data / html ... Использование gzip для всего, что вы переносите, - вот что будет иметь наибольшее значение (не выбор между HTML и JSON)
- Однако следует принять во внимание одну вещь: какие ресурсы потребуются клиенту для воссоздания HTML (или структуры DOM) из данных JSON ... сравните это с добавлением части HTML на страницу; -)
Наконец, одна вещь, которая определенно имеет значение:
- Сколько времени вам понадобится, чтобы разработать новую систему, которая будет отправлять данные в виде JSON + кода JS, необходимого для внедрения их в виде HTML на страницу?
- Сколько времени потребуется, чтобы просто вернуть HTML? И как долго, если вы сможете повторно использовать уже существующий серверный код?
И ответить на другой ответ: если вам нужно обновить более одной части страницы, все еще есть решение / взломать отправку всех этих частей в одну большую строку, которая группирует несколько частей HTML, и извлекать соответствующие части в JS.
Например, вы можете вернуть строку, которая выглядит следующим образом:
<!-- MARKER_BEGIN_PART1 -->
here goes the html
code for part 1
<!-- MARKER_END_PART1 -->
<!-- MARKER_BEGIN_PART2 -->
here goes the html
code for part 2
<!-- MARKER_END_PART2 -->
<!-- MARKER_BEGIN_PART3 -->
here goes the json data
that will be used to build part 3
from the JS code
<!-- MARKER_END_PART3 -->
Это выглядит не очень хорошо, но это определенно полезно (я использовал это довольно пару раз, в основном, когда данные HTML были слишком большими, чтобы быть инкапсулированными в JSON) : вы отправляете HTML для частей страницы, которые нужна презентация, и вы отправляете JSON для ситуации, когда вам нужны данные ...
... И чтобы извлечь их, метод подстроки JS сделает свое дело, я полагаю ;-)