Was sind die Vorteile einer Client / Server-Architektur in Webanwendungen gegenüber einer vom Server generierten Frontend-Anwendung?


13

In unserem Unternehmen müssen wir ein Webinterface auf einer eingebetteten Linux-Plattform erstellen. Ich sehe zwei Möglichkeiten: Sie verwenden eine Technologie, bei der HTML und JavaScript auf der Serverseite generiert werden (Think JSP, Grails, aber es wird C ++ verwendet und HTML / JavaScript generiert) oder Sie erstellen einen HTML5-Client. Anwendung, die mit einem JSON- oder XML-generierenden Backend kommuniziert.

Ich habe das Gefühl, dass Webanwendungen derzeit eher zu letzteren passen, aber was sind die Vorteile davon? (Die Entwickler des Projekts entscheiden sich für erstere, hauptsächlich aufgrund der Tatsache, dass sie C ++ viel besser kennen als HTML und Javascript.)


Wenn die Entwickler mit C ++ besser vertraut sind als mit HTML + JS, warum haben sie sich dann für die frühere Lösung entschieden? Letzteres würde ihnen weniger Probleme bereiten, insbesondere wenn sie den "HTML 5-Client" durch einen Rich-Client wie eine C ++ - Desktop-Anwendung oder eine von Java Applet oder JNLP bereitgestellte Desktop-Anwendung ersetzen ...?
Shivan Dragon

Antworten:


4

Ajax

Ich denke, Ihre Frage lautet: "Soll meine Webanwendung clientseitig oder serverseitig HTML generieren?" Die clientseitige Generierung kommuniziert mit dem Server über AJAX, obwohl das X (XML) im Allgemeinen durch JSON ersetzt wurde, aber die meisten Leute nennen es immer noch AJAX, weil es besser klingt. Serverseitig erstellt der Server nur HTML auf dem Server.

Ich habe viel Erfahrung mit XML und fast keine mit JSON. Alles, was ich über XML weiß, lässt mich vorschlagen, JSON zu verwenden, wenn dies überhaupt möglich ist.

AJAX-Profis:

  • Senden Sie weniger Daten über HTTP (S), damit diese schneller ausgeführt werden können.
  • Der Server ist im Wesentlichen ein Webdienst, damit andere (oder Sie) ihre eigenen Clients schreiben können. Dies kann beim Erstellen einer mobilen Version Ihrer Website hilfreich sein. Viele Erfindungen werden auch aus Gründen populär, die ihr Schöpfer nie beabsichtigt hat. Dienste sind für Leute, die neue Verwendungszwecke für Ihren Code finden, freundlicher.
  • Sieht aus wie eine neuere Anwendung

AJAX Nachteile:

  • Debuggen von JavaScript
  • Komplexität?
  • Die Dinge, die Sie mit JavaScript tun können, sind für Blinde oder Behinderte oft völlig unmöglich.
  • Möglicherweise ist mehr Code insgesamt erforderlich (größerer Gesamtspeicher auf Ihrem eingebetteten Gerät)

Kundenserver

Alle Webanwendungen verwenden eine Client-Server-Architektur. Das HTTP-Protokoll erzwingt das Verhalten von Webanwendungen. AJAX verwendet eine Problemumgehung für diese Entwurfsbeschränkung, das grundlegende zugrunde liegende Modell von HTTP ist jedoch weiterhin Client-Server. Ich würde mich nicht darüber aufregen, wie MVC am besten auf Webanwendungen angewendet werden kann. Wenn Sie aus politischen Gründen MVC machen müssen, schauen Sie sich an, wie Ruby / Rails das macht. Tatsächlich ist Rails eine großartige Architektur zum Kopieren (oder Verwenden).

Service vs. App.

Ein guter Service ist fast immer besser als eine Anwendung. Aber einen guten Service zu leisten ist schwer! Möglicherweise müssen Sie erst einen Antrag stellen, bevor Sie eine ausreichend entwickelte Spezifikation für einen Dienst schreiben können. Machen Sie Ihre Arbeit nicht schwieriger als nötig. Konzentrieren Sie sich bei Version 1 darauf, eine großartige Anwendung zu erstellen. Solange Ihre Anwendung nicht relativ stabil ist und Sie sicher sind, dass sie die Anforderungen Ihres Benutzers erfüllt, wird Ihnen ein Dienst wahrscheinlich sowieso nichts nützen. Zu frühes Entwerfen des falschen Dienstes ist eine Zeitverschwendung, die immer wieder verschwendet wird, wenn Sie versuchen, Ihre Dienstschnittstelle zu reparieren und die nachfolgenden massiven Umgestaltungen von Server- und Client-Code zu bewältigen.

C / Web

Beeindruckend. Ich habe 3 Jahre in C und Assembly gearbeitet, bevor ich zur Webentwicklung gewechselt bin. Ich kann mir keine schlechtere Sprache für das Schreiben einer Webanwendung vorstellen - insbesondere aus Sicherheitsgründen. Die Validierung von Eingaben und das Entweichen von Ausgaben sind so wichtig ... SANS veröffentlicht jedes Jahr eine Liste der häufigsten Fehler. Pufferüberläufe, Injektionen, standortübergreifende Probleme (falsche Ausgabecodierung) ... All diese Fehler sind in C oder in der Assembly sehr einfach zu machen. Zumindest eine Sprache wie Java hat einen String, der unempfindlich gegen Überläufe ist, und einen Mechanismus zur Ausnahmebehandlung, der im Allgemeinen verhindert, dass Off-by-One-Fehler böswilligen Code auf den Systemspeicher zugreifen lassen. Ganz zu schweigen vom Umgang mit internationalen Zeichensätzen ( wenn möglich UTF-8 verwenden ).

Wenn Sie C aus Speicher- oder Firmware-Gründen verwenden müssen, müssen Sie dies tun. Sei einfach vorsichtig!

Browser-Unterstützung

Der erste Schritt zur Erstellung einer Webanwendung besteht darin, zu ermitteln, welche Browser von Ihren Kunden verwendet werden. W3Schools und Wikipedia sind gute Quellen für allgemeine Statistiken, aber YMMV.

Wo ich jetzt arbeite, überprüfen wir derzeit, dass unsere Anwendung nur gültiges XHTML 1.0-Übergangs-HTML erstellt. Wir verwenden auch den spezifischen Doctype und die Formatierung, die erforderlich sind, um den Quirks-Modus im IE zu vermeiden, wodurch sich browserübergreifendes HTML leichter schreiben lässt (siehe Tipps in meinem Blog ). Wir testen die neuesten 3 Versionen von IE sowie Firefox und Chrome unter Windows und Linux (Safari verwendet dieselbe Rendering-Engine wie Chrome). Mit dieser Validierung und diesen Tests funktioniert unsere Anwendung praktisch überall (Windows, Mac, Linux, iPhone, Android usw.), außer auf dem BlackBerry.

Der BlackBerry hatte noch nie einen richtigen Browser mit JavaScript, daher unterstützen wir diesen nicht. BlackBerry-Benutzer sind es gewohnt, keinen echten Webbrowser zu haben, und beschweren sich daher nicht. Vielleicht ändert sich das? Ich würde versuchen, ein paar Kunden zu fragen, welche Browser sie verwenden, und sicherstellen, dass sie mit diesen Browsern testen.

Zusammenfassung

Alle Websites basieren auf HTML und HTTP. Halten Sie eine gute Referenz für diese Technologien bereit, während Sie Ihren Antrag stellen. Während Sie eine Anwendung erstellen, werden Sie auch mit einem Toolkit auf Probleme stoßen, die ein grundlegendes Verständnis dieser Technologien erfordern, um sie zu lösen.

Sie müssen wahrscheinlich auch mit CSS und Bildkomprimierung vertraut sein, um ein anständiges Ergebnis zu erzielen, das schnell reagiert. JavaScript, Webserver und Browser sind zusätzliche Wissensbereiche, die Sie letztendlich benötigen.

Wenn Sie Ihren HTML-Code serverseitig erstellen, ist Ihre Codebasis wahrscheinlich kleiner und Sie müssen möglicherweise kein JavaScript lernen. Das serverseitige Modell bedeutet, dass Ihre Programmierer Code (C?) Schreiben, der HTML generiert, das sie direkt betrachten können, bevor es an den Client gesendet wird. Das AJAX-Modell bedeutet, dass Ihre Programmierer JavaScript schreiben, das HTML generiert. Mir sind nicht viele Tools bekannt, mit denen der von JavaScript in einem Browser generierte HTML-Code überprüft oder sogar angezeigt werden kann, was die korrekte Programmierung erschwert.

Wo ich jetzt arbeite, verwenden wir einen hybriden Ansatz, bei dem gelegentlich Java-Code zum Generieren von JavaScript zum Generieren von HTML verwendet wird. Wenn Sie neu in der Webentwicklung sind, ist dies nicht der richtige Ort, um anzufangen. Ich denke, ich muss sagen, dass ich mit dem älteren Modell der serverseitigen HTML-Generierung beginnen und sehen würde, wie weit es Sie bringt, es sei denn, Sie haben zwingende Gründe, ein AJAX-Modell zu verwenden.


"Ich kenne nicht viele Tools zum Überprüfen oder Anzeigen des von JavaScript in einem Browser generierten HTML-Codes." Genau dafür ist FireBug (oder eine andere Webentwickler-Browsererweiterung, z. B. die Webentwickler-Tools von Chrome).
sleske

13

Letzteres hat den Vorteil, dass es Ihr "Back-End" zu einem generischen "Datendienst" macht (was auch immer das in Ihrem Kontext bedeuten mag).

Ihr HTML-Client ist dann nur einer der vielen möglichen Konsumenten dieser Daten. Denken Sie an iOS-App, Andriod-App, Windows 8-App, APIs usw. - wie an andere Verbraucher.


Auch wenn es ein zweischneidiges Schwert sein kann (weitere Dinge hängen von der API ab, was das Aktualisieren erschwert), hilft es auch, den serverseitigen Code zu vereinheitlichen, anstatt eine Reihe von "Web" und "API" zu verwalten "Controller und Ansichten. Trennung von Anliegen FTW.
Shauna

6

Eine immer häufiger vorkommende Art einer Webanwendung ist eine Mischung aus beidem, wobei die eine oder andere Seite im Vordergrund steht.

Der erste Ansatz ist traditioneller, gibt es seit Jahren und ist gut dokumentiert (obwohl C ++ im Allgemeinen keine dafür beliebte Sprache ist).

Die zweite Option ist moderner und ist heutzutage in den Entwicklungsblogs und -foren zu finden. Einer der Gründe dafür ist der wachsende Bedarf, dieselbe Anwendung für andere Schnittstellen, Mobilgeräte und Dienst-APIs bereitzustellen. Der zweite Ansatz zielt darauf ab, dass der Kunde reicher und reaktionsfähiger wird.

Alles in allem hängt dies von anderen Einschränkungen ab, wie der Vertrautheit des Teams und dem Geschäftsmodell.

Einige Fragen, die Ihnen bei der Beurteilung Ihrer Optionen helfen können:

  1. Hat das Team Erfahrung in Sprache und Plattform?
  2. Ist das Team bereit, neue Ansätze und Technologien zu erlernen?
  3. Nutzt die Anwendung die Vorteile einer einfacheren Programmierbarkeit für andere Geräte (iPhone, Android, Windows 8 usw.)?
  4. Wird eine andere, interne oder externe App, die in Dienste oder Daten integriert ist, für die Anwendung verfügbar sein?

5

Für solche "Intranet" -Anwendungen verwende ich den Fat-Client-Ansatz (JavaScript / HTML5-App + JSON) mit ExtJS4.

Für normale "Internet" -Websites würde ich einen eher "klassischen" Ansatz verwenden.

Die Clients müssen die Site trotzdem rendern. Warum also nicht den gesamten Prozess in Rechnung stellen und ihnen nur die Daten zum Ausfüllen geben? Der Servercode zum Generieren von Antworten (nur JSON oder XML) wird einfach eingegeben, was die Leistung senkt. Da es immer mehr Clients als Server gibt, skaliert das gesamte System auch viel besser, wenn mehr von den Clients erledigt wird.

Der Client-Code wird mit HTTP ausgeliefert. Sie können weiterhin problemlos neue Versionen an die Benutzer senden, ohne dass ein undurchsichtiger Aktualisierungsmechanismus erforderlich ist. (Ersetzen Sie einfach die HMTL / JS / CSS)

Der einzige Grund, warum ich einen klassischen Ansatz auf normalen Websites bevorzugen würde, sind Suchmaschinen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.