Sono un po 'da entrambe le parti, in realtà:
- Quando ciò che mi serve sul lato javascript sono i dati , uso JSON
- Quando quello che mi serve sul lato javascript è la presentazione su cui non farò alcun calcolo, generalmente utilizzo l'HTML
Il vantaggio principale dell'utilizzo di HTML è quando si desidera sostituire una parte completa della pagina con ciò che ritorna dalla richiesta Ajax:
- Ricostruire una parte della pagina in JS è (abbastanza) difficile
- Probabilmente hai già un motore di template sul lato server, che è stato usato per generare la pagina in primo luogo ... Perché non riutilizzarla?
In genere non prendo davvero in considerazione il lato "prestazionale" delle cose, almeno sul server:
- Sul server, generare una porzione di HTML o un po 'di JSON probabilmente non farà molta differenza
- Circa le dimensioni del materiale che passa attraverso la rete: beh, probabilmente non usi centinaia di KB di dati / html ... L'uso di gzip su qualunque cosa tu stia trasferendo è ciò che farà la differenza (non scegliere tra HTML e JSON)
- Una cosa che potrebbe essere presa in considerazione, tuttavia, è quali risorse ti serviranno sul client per ricreare l'HTML (o la struttura DOM) dai dati JSON ... confrontalo con lo spingere una porzione di HTML nella pagina; -)
Infine, una cosa che conta definitivamente:
- Quanto tempo ci vorrà per sviluppare un nuovo sistema che invierà i dati come codice JSON + che JS ha richiesto per iniettarli come HTML nella pagina?
- Quanto tempo ci vorrà solo per restituire HTML? E per quanto tempo se riesci a riutilizzare parte del tuo codice lato server già esistente?
E per rispondere a un'altra risposta: se è necessario aggiornare più di una porzione della pagina, esiste ancora la soluzione / hacking di inviare tutte quelle parti all'interno di una grande stringa che raggruppa diverse parti HTML ed estrarre le parti pertinenti in JS.
Ad esempio, potresti restituire una stringa simile a questa:
<!-- 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 -->
Non sembra davvero buono, ma è sicuramente utile (l'ho usato un paio di volte, soprattutto quando i dati HTML erano troppo grandi per essere incapsulati in JSON) : stai inviando HTML per le parti della pagina che hai bisogno di presentazione e stai inviando JSON per la situazione in cui hai bisogno di dati ...
... E per estrarre quelli, il metodo di sottostringa JS farà il trucco, suppongo ;-)