Estoy un poco en ambos lados, en realidad:
- Cuando lo que necesito en el lado de JavaScript son datos , uso JSON
- Cuando lo que necesito en el lado de JavaScript es una presentación en la que no haré ningún cálculo, generalmente uso HTML
La principal ventaja de usar HTML es cuando desea reemplazar una parte completa de su página con lo que devuelve la solicitud de Ajax:
- Reconstruir una parte de la página en JS es (bastante) difícil
- Probablemente ya tenga un motor de plantillas en el lado del servidor, que se utilizó para generar la página en primer lugar ... ¿Por qué no reutilizarlo?
Por lo general, no tomo en cuenta el lado del "rendimiento" de las cosas, al menos en el servidor:
- En el servidor, generar una porción de HTML o algo de JSON probablemente no hará una gran diferencia
- Sobre el tamaño de las cosas que pasan por la red: bueno, probablemente no uses cientos de KB de datos / html ... Usar gzip en lo que sea que estés transfiriendo es lo que hará la mayor diferencia (no elegir entre HTML y JSON)
- Sin embargo, una cosa que podría tenerse en cuenta es qué recursos necesitará en el cliente para recrear el HTML (o la estructura DOM) a partir de los datos JSON ... compárelo con insertar una parte de HTML en la página; -)
Finalmente, una cosa que definitivamente importa:
- ¿Cuánto tiempo le llevará desarrollar un nuevo sistema que envíe datos como código JSON + que JS requirió para inyectarlo como HTML en la página?
- ¿Cuánto tiempo llevará devolver HTML? ¿Y cuánto tiempo si puede reutilizar parte de su código del lado del servidor ya existente?
Y para responder a otra respuesta: si necesita actualizar más de una parte de la página, todavía existe la solución / truco de enviar todas esas partes dentro de una gran cadena que agrupa varias partes HTML y extraer las partes relevantes en JS.
Por ejemplo, podría devolver una cadena que se vea así:
<!-- 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 -->
Eso no se ve realmente bien, pero es definitivamente útil (lo he usado un par de veces, principalmente cuando los datos HTML eran demasiado grandes para encapsularlos en JSON) : está enviando HTML para las partes de la página que necesita presentación, y está enviando JSON para la situación en la que necesita datos ...
... Y para extraerlos, supongo que el método de subcadena JS hará el truco ;-)