Architekturrichtlinien für eine "Single Page Web-App"

12

Ich werde ein Nebenprojekt starten, um eine "einzelne Seite" Webanwendung zu erstellen. Die Anwendung muss in Echtzeit ausgeführt werden und bei Änderungen Aktualisierungen an die Clients senden.

Gibt es gute Ressourcen für Best-Practice-Ansätze bezüglich der Architektur für diese Art von Anwendungen? Die beste Ressource, die ich bisher gefunden habe, ist der Artikel zur Trello-Architektur hier: http://blog.fogcreek.com/the-trello-tech-stack/

Für mich ist diese Architektur, obwohl sie sehr sexy ist, wahrscheinlich für meine spezifischen Bedürfnisse überentwickelt - obwohl ich ähnliche Anforderungen habe. Ich frage mich, ob ich mich um ein Sub / Pub auf der Serverseite kümmern muss. Könnte ich nicht einfach Updates vom Server pushen, wenn etwas passiert (zB wenn der Client ein Update an den Server sendet, schreibe das Update an die Datenbank, und dann ein Update an die Clients senden).

Technisch gesehen möchte ich dies wahrscheinlich in Node.JS oder vielleicht in Ruby ausbauen, obwohl die Architekturrichtlinien in gewissem Maße für alle zugrunde liegenden Servertechnologien gelten sollten.

Matt Roberts
quelle

Antworten:

5

Ich würde definitiv nach clientseitigem MVC suchen, zum Beispiel nach Backbone.js. Es ist sehr leicht, verleiht Ihrer Anwendung jedoch die dringend benötigte Struktur. Ich empfehle den Peepcode-Screencast als schnellste Möglichkeit, mehr über Backbone zu erfahren.

Ein netter architektonischer Vorteil von MVC auf der Client-Seite ist die Tatsache, dass Sie leichter Daten mit Ihrer Server-Seite austauschen können, z. B. strukturiertes JSON über REST.

Backbone.js unterstützt dies von Anfang an - Sie können Ihre Modelle zwischen Client und Server als JSON serialisieren, sodass wir nicht mehr über Anfragen / Antworten nachdenken müssen.

Etwas wie Node.js auf der Serverseite spricht unter diesem Modell möglicherweise viele kurzlebige potenziell asynchrone Anforderungen an, um Daten zu pushen und zu ziehen.

Eine Alternative ... Ein Modell wie Comet kann ein einfacher Weg sein, um Web Pub / Sub zu erreichen, und es gibt einige serverseitige Frameworks, die dies unterstützen.

Benjamin Wootton
quelle
Prost, ich habe definitiv darüber nachgedacht, eine MV * FW für die Client-Seite zu verwenden, und habe etwas über Backbone gelernt. Gute Tipps.
Matt Roberts
1

Ich würde wahrscheinlich mit einem MV * Javascript Framework für das Frontend gehen. Ich selbst erstelle eine einseitige Webanwendung und nachdem ich eine Reihe von Lösungen untersucht habe, bin ich zu Backbone.js gekommen. Ich stellte fest, dass diese Lösung zwar nicht die meisten Standardfunktionen bietet, aber zunächst eine zentrale Grundlage bietet und wesentlich flexibler ist als andere Lösungen, die ich mir angesehen habe (was für mich wichtig war).

Andere populäre Lösungen sind Ember.js und Knockout.js, die mehr Standardfunktionen bieten. Sie müssen jedoch die Konventionen befolgen, um diese Funktionen nutzen zu können (die für Sie möglicherweise funktionieren oder nicht).

Ryanzec
quelle
1

Dies ist ein Kinderspiel IMO. AngularJS für das Frontend, weil es großartig ist. NodeJS / express / SocketIO für ein dynamisches und sexy Backend mit Pub / Sub-Güte und minimalem Aufwand. Und als Bonus können Sie eine Sprache für die Vorder- und Rückseite verwenden!

Ein Beispiel finden Sie in meiner Implementierung des gleichen https://github.com/hackify/hackify-servers

Eine Einschränkung, einige Leute empfehlen eine NodeJS-Alternative zu Socketio namens sockjs, aber ich habe dies nicht überprüft, daher kann ich es nicht empfehlen

Michael Dausmann
quelle
0

Klingt nach Apache 2.2 mit PHP oder Tomcat-Anwendungsserver mit einem einfachen Servlet, das Anforderungen verarbeitet. Es ist das Äquivalent des Zimmermanns zu Hammer und Nägeln. Nichts kompliziertes, aber es erledigt die Arbeit. Wenn Sie jemals die Funktionalität erweitern mussten, konnten Sie dies jederzeit tun, da Tomcat jsp und jsf unterstützen kann, falls dies jemals erforderlich war.

Was das Front-End angeht , würde ich gerne einfach jQuery ( $ .post , $ .load , $ .ajax ) verwenden, da es sehr praktisch ist, in Kombination mit der jQuery-Benutzeroberfläche Funktionen für Ihre Seite hinzuzufügen

Neil
quelle
0

Wenn Sie Client-Updates in Echtzeit wünschen, müssen Sie entweder die lang blockierenden "AJAX" -Aufrufe implementieren oder vorzugsweise die modernen Websockets verwenden. Damit können Sie Aktualisierungen auf einen verbundenen Client übertragen, die mit etwas Javascript verarbeitet werden.

Ich verstehe, dass der aktuelle Stand der Technik (oder die neueste Modeerscheinung) AngularJS von Google ist. Es wurde teilweise entwickelt, um das Schreiben von SPAs zu vereinfachen.

gbjbaanb
quelle
0

Wenn Sie etwas in der Nähe des mittleren Stapels (node.js, mongo ...) für die Erstellung einer Anwendung für eine einzelne Seite möchten, die reaktiv sein muss, würde ich Meteor wählen . Vor allem, wenn Sie einen Prototyp erstellen und von vorne beginnen.

Rails mit einem eckigen Frontend wären eine gute Wahl, aber es wird schwieriger für Sie, "Updates an die Clients zu senden, wenn Änderungen eintreten", da Sie bestimmte Gems installieren, einige Long-Polling- oder Sockjs-Bibliotheken aneinander reihen müssen. .

Benjamin Crouzier
quelle