Es ist ganz einfach, HTML-Inhalte mit JQuery oder einem ähnlichen Framework von Ihren benutzerdefinierten URLs / Webdiensten zu laden. Ich habe diesen Ansatz viele Male und bis jetzt verwendet und fand die Leistung zufriedenstellend.
Aber alle Bücher, alle Experten versuchen mich dazu zu bringen, JSON anstelle von generiertem HTML zu verwenden. Wie ist es viel besser als HTML?
Ist es sehr viel schneller?
Hat es eine sehr viel geringere Belastung auf dem Server?
Auf der anderen Seite habe ich einige Gründe für die Verwendung von generiertem HTML.
- Es ist ein einfaches Markup und oft genauso kompakt oder sogar kompakter als JSON.
- Es ist weniger fehleranfällig, da Sie nur Markup und keinen Code erhalten.
- In den meisten Fällen ist das Programmieren schneller, da Sie den Code für das Client-Ende nicht separat schreiben müssen.
Auf welcher Seite stehst du und warum?
Antworten:
Eigentlich bin ich ein bisschen auf beiden Seiten:
Der Hauptvorteil der Verwendung von HTML besteht darin, dass Sie einen vollständigen Teil Ihrer Seite durch das ersetzen möchten, was aus der Ajax-Anforderung stammt:
Ich berücksichtige im Allgemeinen nicht wirklich die "Leistungsseite" der Dinge, zumindest auf dem Server:
Schließlich eine Sache, die definitiv wichtig ist:
Und um eine andere Antwort zu beantworten: Wenn Sie mehr als einen Teil der Seite aktualisieren müssen, gibt es immer noch die Lösung / den Hack, alle diese Teile in einer großen Zeichenfolge zu senden, die mehrere HTML-Teile gruppiert und die relevanten Teile in JS extrahiert.
Sie könnten beispielsweise eine Zeichenfolge zurückgeben, die folgendermaßen aussieht:
Das sieht nicht wirklich gut aus, ist aber auf jeden Fall nützlich (ich habe es einige Male verwendet, meistens, wenn die HTML-Daten zu groß waren, um in JSON gekapselt zu werden) : Sie senden HTML für die Teile der Seite, die benötigen Präsentation, und Sie senden JSON für die Situation, in der Sie Daten benötigen ...
... und um diese zu extrahieren, wird die JS-Teilstring-Methode den Trick machen, nehme ich an ;-)
quelle
Ich stimme hauptsächlich den hier geäußerten Meinungen zu. Ich wollte sie nur zusammenfassen als:
Es ist eine schlechte Praxis, HTML zu senden, wenn Sie es am Ende clientseitig analysieren, um einige Berechnungen darüber durchzuführen.
Es ist eine schlechte Praxis, JSON zu senden, wenn Sie es am Ende nur in den DOM-Baum der Seite integrieren müssen.
quelle
Gut,
Ich bin eine dieser seltenen Personen, die Dinge gerne folgendermaßen trennen: - Der Server ist für die Bereitstellung von Daten (Modell) verantwortlich. - Der Kunde ist dafür verantwortlich, Daten anzuzeigen (anzuzeigen) und zu bearbeiten (Modell).
Der Server sollte sich also auf die Bereitstellung des Modells konzentrieren (in diesem Fall ist JSON besser). Auf diese Weise erhalten Sie einen flexiblen Ansatz. Wenn Sie die Ansicht Ihres Modells ändern möchten, sendet der Server dieselben Daten und ändert lediglich den Client, die Javascript-Komponenten, die diese Daten in eine Ansicht ändern. Stellen Sie sich vor, Sie haben einen Server, der Daten sowohl an mobile Geräte als auch an Desktop-Apps liefert.
Dieser Ansatz erhöht auch die Produktivität, da der Server- und Client-Code gleichzeitig erstellt werden kann, ohne den Fokus zu verlieren, was passiert, wenn Sie ständig von js zu PHP / JAVA / usw. wechseln.
Generell denke ich, dass die meisten Leute es vorziehen, so viel wie möglich auf der Serverseite zu tun, weil sie js nicht beherrschen, also versuchen sie, es so weit wie möglich zu vermeiden.
Grundsätzlich bin ich der gleichen Meinung wie die Leute, die an Angular arbeiten. Meiner Meinung nach ist das die Zukunft von Web-Apps.
quelle
Ich habe etwas Interessantes, von dem ich dachte, ich könnte es hinzufügen. Ich habe eine Anwendung entwickelt, die nur einmal eine vollständige Ansicht geladen hat. Ab diesem Zeitpunkt wurde nur noch mit Ajax an den Server zurückgemeldet. Es musste immer nur eine Seite geladen werden (mein Grund dafür ist hier unwichtig). Der interessante Teil besteht darin, dass ich ein besonderes Bedürfnis hatte, einige Daten zurückzugeben, die im Javascript bearbeitet werden sollen, UND eine Teilansicht anzuzeigen. Ich hätte dies in zwei Aufrufe zu zwei getrennten Aktionsmethoden aufteilen können, aber ich entschied mich für etwas, das ein bisschen mehr Spaß macht.
Hör zu:
Was ist RenderPartialViewToString (), das Sie fragen könnten? Es ist dieses kleine Nugget der Kühle hier:
Ich habe diesbezüglich keine Leistungstests durchgeführt, daher bin ich mir nicht sicher, ob dies mehr oder weniger Aufwand verursacht als das Aufrufen einer Aktionsmethode für das JsonResult und einer für das ParticalViewResult, aber ich fand es trotzdem ziemlich cool. Es serialisiert nur eine Teilansicht in eine Zeichenfolge und sendet sie zusammen mit dem Json als einen seiner Parameter. Ich benutze dann JQuery, um diesen Parameter zu nehmen und ihn in den entsprechenden DOM-Knoten zu stecken :)
Lassen Sie mich wissen, was Sie von meinem Hybrid halten!
quelle
Wenn die Antwort keine weitere clientseitige Verarbeitung erfordert, ist HTML meiner Meinung nach in Ordnung. Durch das Senden von JSON werden Sie nur gezwungen, diese clientseitige Verarbeitung durchzuführen.
Andererseits verwende ich JSON, wenn ich nicht alle Antwortdaten auf einmal verwenden möchte. Zum Beispiel habe ich eine Reihe von drei verketteten Auswahlen, wobei der ausgewählte Wert von eins bestimmt, welche Werte zum Auffüllen der zweiten verwendet werden sollen, und so weiter.
quelle
IMV, es geht nur darum, die Daten von der Präsentation der Daten zu trennen, aber ich bin bei Pascal, es folgt nicht unbedingt, dass diese Trennung nur über die Client / Server-Grenze erfolgen kann. Wenn Sie diese Trennung bereits (auf dem Server) haben und dem Client nur etwas anzeigen möchten, hängt es ganz von Ihren Anforderungen ab, ob Sie JSON zurücksenden und auf dem Client nachbearbeiten oder nur HTML zurücksenden. Zu sagen, dass Sie "falsch" sind, HTML im allgemeinen Fall zurückzusenden, ist eine viel zu pauschale Aussage IMV.
quelle
JSON ist ein sehr vielseitiges und leichtes Format. Ich habe seine Schönheit entdeckt, als ich damit begonnen habe, es als clientseitige Vorlagen-Parser-Daten zu verwenden. Lassen Sie mich erklären, während ich früher Smarty und Ansichten auf der Serverseite verwendet habe (was eine hohe Serverlast erzeugt), verwende ich jetzt einige benutzerdefinierte Abfragefunktionen und alle Daten werden auf der Clientseite gerendert, wobei der Client-Browser als Vorlagenparser verwendet wird. Es spart Serverressourcen und andererseits verbessern Browser ihre JS-Engines jeden Tag. Daher ist die Geschwindigkeit der Client-Analyse derzeit kein wichtiges Thema. Darüber hinaus sind JSON-Objekte normalerweise sehr klein, sodass sie nicht viele clientseitige Ressourcen verbrauchen. Ich bevorzuge eine langsame Website für einige Benutzer mit langsamem Browser, anstatt eine langsame Website für alle, da der Server sehr ausgelastet ist.
Wenn Sie jedoch reine Daten vom Server senden, abstrahieren Sie diese von der Präsentation. Wenn Sie sie also morgen ändern oder Ihre Daten in einen anderen Dienst integrieren möchten, können Sie dies viel einfacher tun.
Nur meine 2 Cent.
quelle
Wenn Sie einen sauberen entkoppelten Client wünschen, was meiner Meinung nach die beste Vorgehensweise ist, ist es sinnvoll, 100% des DOM von Javascript erstellen zu lassen. Wenn Sie einen MVC-basierten Client erstellen, der über alle Kenntnisse zum Erstellen der Benutzeroberfläche verfügt, laden Ihre Benutzer einmal eine Javascript-Datei herunter und sie wird auf dem Client zwischengespeichert. Alle Anforderungen nach dem ersten Laden basieren auf Ajax und geben nur Daten zurück. Dieser Ansatz ist der sauberste, den ich gefunden habe, und sorgt für eine saubere, unabhängige Kapselung der Präsentation.
Die Serverseite konzentriert sich dann nur auf die Bereitstellung von Daten.
Wenn Sie also morgen vom Produkt aufgefordert werden, das Design einer Seite vollständig zu ändern, ändern Sie lediglich die Quell-JS, die das DOM erstellt. Wahrscheinlich können Sie jedoch Ihre bereits vorhandenen Ereignishandler wiederverwenden, und der Server ist sich dessen nicht bewusst, da er zu 100% von der Präsentation entkoppelt ist
quelle
Abhängig von Ihrer Benutzeroberfläche müssen Sie möglicherweise zwei (oder mehr) verschiedene Elemente in Ihrem DOM aktualisieren. Wenn Ihre Antwort in HTML ist, werden Sie das analysieren, um herauszufinden, was wohin geht? Oder Sie können einfach einen JSON-Hash verwenden.
Sie können es sogar kombinieren, einen JSON mit HTML-Daten zurückgeben :)
quelle
HTML hat viele redundante und nicht angezeigte Daten, z. B. Tags, Stylesheets usw. Daher ist die HTML-Größe im Vergleich zu JSON-Daten größer, was zu mehr Download- und Renderzeit führt. Außerdem ist der Browser damit beschäftigt, die neuen Daten zu rendern.
quelle
Das Senden von json erfolgt im Allgemeinen, wenn ein Javascript-Widget Informationen vom Server anfordert, z. B. eine Liste, eine Baumansicht oder eine automatische Vervollständigung. In diesem Fall würde ich JSON senden, da es sich um Daten handelt, die analysiert und roh verwendet werden. Wenn Sie jedoch nur HTML anzeigen möchten, ist es viel weniger Arbeit, es serverseitig zu generieren und es einfach im Browser anzuzeigen. Browser sind für das direkte Einfügen von HTML in den Dom mit innerHTML = "" optimiert, sodass Sie nichts falsch machen können.
quelle
innerHTML
ist historisch viel langsamer als ein Dokumentfragment: coderwall.com/p/o9ws2g/… .Ich denke, es hängt von der Struktur des Designs ab. Es ist einfach sexy, JSON als HTML zu verwenden, aber die Frage ist, wie man damit umgehen würde, damit es leicht zu warten ist.
Angenommen, ich habe eine Auflistungsseite, die denselben HTML- / Stil der gesamten Site verwendet. Ich würde die globale Funktion schreiben, um diese Teile von HTML zu formatieren, und alles, was ich tun muss, ist, das JSON-Objekt an die Funktion zu übergeben.
quelle
Eine HTML-Antwort ist in den meisten Fällen ausreichend, es sei denn, Sie müssen auf der Clientseite eine Berechnung durchführen.
quelle
Kommt auf die Umstände an.
Manchmal ist es wichtig, JSON zu vermeiden. Wenn unsere Programmierer zum Beispiel Probleme beim Programmieren in js haben.
Meine Erfahrung zeigt mir Folgendes: Verwenden Sie den Ajax-Dienst besser als Inline-JSON.
Früher oder später wird das js zum Problem
quelle