Я трохи по обидва боки, насправді:
- Коли то , що мені потрібно на стороні браузера дані , я використовую JSON
- Коли мені потрібно на стороні javascript - це презентація, на якій я не буду робити жодних обчислень, я зазвичай використовую HTML
Основна перевага використання HTML полягає в тому, що ви хочете замінити повну частину своєї сторінки тим, що повертається з запиту Ajax:
- Повторно скласти частину сторінки в JS (досить) важко
- Напевно, у вас вже є якийсь механізм шаблонування на стороні сервера, який використовувався в першу чергу для створення сторінки ... Чому б не використати її повторно?
Я, як правило, не беру до уваги "продуктивність" сторони речей, принаймні на сервері:
- На сервері, генеруючи частину HTML чи деякий JSON, ймовірно, це не змінить
- Про розмір речей, які проходять через мережу: ну ви, мабуть, не використовуєте сотні КБ даних / 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 зробить трюк, я думаю ;-)