javascript - Hvorfor er det en dårlig praksis å returnere generert HTML i stedet for JSON? Eller er det?


Det er ganske enkelt å laste HTML-innhold fra dine egne URL-er/nettjenester ved hjelp av JQuery eller andre lignende rammeverk. Jeg har brukt denne tilnærmingen mange ganger til nå og har funnet ytelsen tilfredsstillende.

Men alle bøkene, alle ekspertene prøver å få meg til å bruke JSON i stedet for generert HTML. Hvordan er det mye mer overlegent enn HTML?

Er det mye raskere?
Har det mye mindre belastning på serveren?

På den andre siden har jeg noen grunner til å bruke generert HTML.

  1. Det er enkel merking, og ofte like kompakt eller faktisk mer kompakt enn JSON.
  2. Det er mindre feilutsatt fordi alt du får er markup, og ingen kode.
  3. Det vil være raskere å programmere i de fleste tilfeller fordi du ikke trenger å skrive kode separat for klientdelen.

Hvilken side står du på, og hvorfor?

Svar #1

Jeg er egentlig litt på begge sider :

  • Når det jeg trenger på JavaScript-siden er data, bruker jeg JSON
  • Når det jeg trenger på JavaScript-siden er presentasjon som jeg ikke vil gjøre noen beregning på, bruker jeg vanligvis HTML

Hovedfordelen med å bruke HTML er når du vil erstatte en hel del av siden din med det som kommer tilbake fra Ajax-forespørselen :

  • Å bygge om en del av siden i JS er (ganske) vanskelig
  • Du har sannsynligvis allerede en eller annen malmotor på serversiden, som ble brukt til å generere siden i utgangspunktet... Hvorfor ikke gjenbruke den?

Jeg tar som regel ikke virkelig hensyn til «ytelses»-siden av ting, i hvert fall ikke på serveren :

  • På serveren vil det sannsynligvis ikke utgjøre så stor forskjell å generere en del av HTML eller noe JSON
  • Om størrelsen på det som går gjennom nettverket: vel, du bruker sannsynligvis ikke hundrevis av KB med data/html... Å bruke gzip på det du overfører er det som vil gjøre den største forskjellen (ikke å velge mellom HTML og JSON)
  • En ting som kan tas i betraktning, er imidlertid hvilke ressurser du vil trenge på klienten for å gjenskape HTML-en (eller DOM-strukturen) fra JSON-dataene... sammenlign det med å sende en del av HTML inn på siden ;-)

Til slutt, én ting som definitivt betyr noe :

  • Hvor lang tid vil det ta deg å utvikle et nytt system som vil sende data som JSON + kode JS som kreves for å injisere det som HTML på siden?
  • Hvor lang tid vil det ta å bare returnere HTML? Og hvor lang tid hvis du kan gjenbruke noe av allerede eksisterende server-side kode?

Og for å svare på et annet svar: hvis du trenger å oppdatere mer enn en del av siden, finnes det fortsatt løsningen/hacket med å sende alle disse delene inne i en stor streng som grupperer flere HTML-deler, og hente ut de relevante delene i JS.

For eksempel kan du returnere en streng som ser slik ut:

<!-- 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 -->

Det ser ikke særlig bra ut, men det er definitivt nyttig (jeg har brukt det ganske mange ganger, mest når HTML-dataene var for store til å kunne kapsles inn i JSON) : du sender HTML for de delene av siden som trenger presentasjon, og du sender JSON for situasjonen der du trenger data...

... Og for å hente ut disse, vil JS substring-metoden gjøre susen, antar jeg ;-)

Svar #2

Jeg er stort sett enig i meningene som er uttrykt her. Jeg ville bare oppsummere dem som:

  • Det er dårlig praksis å sende HTML hvis du ender opp med å analysere det på klientsiden for å utføre noen beregninger over det.

  • Det er dårlig praksis å sende JSON hvis alt du ender opp med å gjøre er å innlemme det i sidens DOM-tre.

Svar #3

Vel,

Jeg er en av de sjeldne personene som liker å skille ting på denne måten: - Serveren er ansvarlig for å levere data (modell); - Klienten er ansvarlig for å vise (visning) og manipulere data (modell);

Så, serveren bør fokusere på å levere modellen (i dette tilfellet er JSON bedre). På denne måten får du en fleksibel tilnærming. Hvis du vil endre visningen av modellen din, beholder du serveren som sender de samme dataene og endrer bare klienten, JavaScript-komponentene, som endrer disse dataene til en visning. Tenk deg at du har en server som leverer data til mobile enheter så vel som desktop-applikasjoner.

I tillegg øker denne tilnærmingen produktiviteten, siden server- og klientkoden kan bygges samtidig, og man mister aldri fokuset, noe som skjer når man stadig bytter mellom js og PHP/JAVA/osv.

Generelt tror jeg de fleste foretrekker å gjøre så mye som mulig på serversiden fordi de ikke behersker js, så de prøver å unngå det så mye som mulig.

Basert på det har jeg samme mening som de gutta som jobber med Angular. Etter min mening er det fremtiden for webapper.

Relaterte artikler