Ist eine client-seitige UI-rendering via Javascript eine gute Idee?
Den "klassischen" Herangehensweise an web-Entwicklung hat seit einiger Zeit einen thin-client und einen dicken server: der server generiert HTML und spuckt es aus, für den browser nur zum Rendern. Aber mit aktuellen Browsern (und auch durch die Verfügbarkeit von guten Bibliotheken und frameworks) Javascript funktioniert jetzt. Web-Entwickler können jetzt ziemlich viel davon ausgehen, dass Ihre Javascript-code zu arbeiten und zu stoppen stört.
Zweifellos eröffnet neue Möglichkeiten für web-Entwicklung. Apps können nun zusammengesetzt werden meist von HTML-Inhalt, der vom server zurückgegeben und vom browser angezeigt werden mit einigen UI-manipulation geschieht client-Seite. Der client könnte auch die Abfrage der server neue Daten für die Aktualisierung von teilen des UI. Aber können wir nach unten gehen, alle anderen Weg? Eine app kann sicherlich so gestaltet werden, dass ein server, der spuckt nur die minimalistischsten JSON geklebt zusammen zu eine Dicke von Javascript-client-verantwortlich für den Aufbau und die Steuerung der gesamten Benutzeroberfläche. Ja, dieser Ansatz kann ernst brechen URLs zu dem Ausmaß, dass die Menschen können nicht mehr senden Zeiger um, aber es ist sicherlich möglich, entwerfen Sie Ihre Weise um die (und für einige apps, wie e-mail-und feed-Reader, dieser ist ja auch egal).
Was denkst du? Haben Sie jemals versucht, diesen Ansatz? Tun die Dinge zu langsam? Sind moderne Browser in der Lage Umgang mit, dass die Menge an Javascript-code? Gibt es irgendwelche signifikanten Unterschiede zwischen den Browser-Implementierungen, die noch beißen die unadvised Entwickler auch bei der neuesten Bibliotheken? Welche Arten von Anwendungen Sie denken, dieser Ansatz ist geeignet? Ist es eigentlich geeignet für alles?
- Für diejenigen, die noch diese Seite finden: werfen Sie einen Blick auf Web Components, scheint so, das wird die Zukunft sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bin ich auf das hintere Ende des Gebäudes, nur diese Art von app. Es ist ein ExtJS GUI auf Zend Framework JSON-RPC-web-services, die Einführung einer iGoogle-gadget wie portal.
Vorteile:
Nachteile:
Treibende Grund für uns, dies zu tun war, um eine bessere user experience. Benutzer erwarten, dass ein desktop-ähnliches Erlebnis, und Sie können nicht liefern, dass über ein server-roundtrip. Wir Holen Sie zu liefern, dass jetzt, aber es ist nicht zu leugnen, es gibt große Herausforderungen, die mit einem Ansatz wie diesem. Insgesamt bin ich zufrieden, obwohl.
Update (september 2013):
Immer noch mit dieser Architektur und immer noch denken, es ist die richtige Architektur, wenn Sie eine echte web-Anwendung (nicht nur eine web-Seite mit dynamischen Funktionen). Unser team und das Produkt ist jetzt viel größer (kurz vor der 500.000 Zeilen code), aber die Architektur skaliert hat, ohne Frage. Es gibt nun wirklich viele gute, skalierbare javascript-frameworks (angular, ember, ...), so ist es einfacher als je zuvor, um auf diese Weise verabschieden zu arbeiten.
Da @rwoo gebeten, einige Herausforderungen, die wir noch haben:
Ihre Behauptung, dass web-Entwickler können jetzt "ziemlich viel davon aus Ihren Javascript-code zu arbeiten" ist schwierig zu vereinbaren mit. Meiner Erfahrung nach ist Javascript fast immer ein Schwarzes Loch saugen alle die Zeit und Energie, die Sie beliefern können. Frameworks wie Prototype und Script.aculo.uns haben die Dinge VIEL besser, aber Sie sind noch nicht so verhärtet, als Ihre Frage unterstellt.
Die beiden wichtigsten Fragen sind ein, browser-Unterstützung und zwei ist die Entwicklung der Zeit. Sie verlassen sich auf eine Anwendung, die Sie nicht kontrollieren können, zu handhaben den Großteil des app-Belastung. Die Tatsache, dass diese gebrochen werden kann, der auch nur das kleinste update der browser würde mich besorgt. Generieren der HTML-server-Seite vermindert dieses Risiko weitgehend. Entwicklung von rich Javascript-front-end ist zeitaufwendig, schwierig zu Debuggen und ebenso schwierig zu testen, über die Breite Palette der verfügbaren Browser.
Während diese Bedenken sind real, die Tatsache, dass Sie können erreichen, einige fantastischen Benutzer Erfahrungen mit client-side Javascript kann nicht ignoriert werden. Die frameworks, die ich früher erwähnt aussetzen Funktionalitäten, die nicht einmal davon geträumt, vor ein oder zwei Jahren, und als Ergebnis machen die bis vor Entwicklung der Preise in einigen Fällen weitgehend gelohnt (und manchmal erheblich verkürzt werden, wenn die Rahmenbedingungen effektiv umgesetzt).
Ich denke, es gibt Anwendungen für Ein Javascript-powered-UI, so lange wie die Entscheidung, diese Strecke zu fahren, ist gut durchdacht. Wären wir nicht diskutieren, diese auf, SO waren es nicht für die Tatsache, dass die UI-Potenzial mit Hilfe dieser Strategie ist genial. Web-basierte applicationsusing web-basierten Daten sind perfekte Kandidaten (RSS-Feeds, REST-Services). Anwendungen schlagen eine relation der Datenbank oder komplexe Web services repeadly gehen, um durch die Notwendigkeit, pflegen eine engere Kopplung mit der server-Seite.
My 2 cents.
Tools wie Google GWT tun, was Sie beschreiben - Rendern viel von der client-Seite in javascript. Einige der grobe layout wird immer noch nach unten, die mit HTML, aber die interessanten Teile fertig sind dynamisch, client-Seite.
Aber GWT verwendet erzeugt javascript, nicht von hand geschrieben. Dies zu tun mit der hand ist schmerzhaft.
Habe ich es getan mit der hand. Es war irgendwie ein Schmerz, aber es gibt einige Kopf. Diese ist nur geeignet für rich-Internet-apps, bei denen ein fallback macht wenig Sinn. Ich denke, wir werden sehen, mehr und mehr apps, die benötigen JavaScript, vor allem nach frameworks wie Cappuccino-Atlas kommt.
Ich denke, es ist schrecklich. Schwer zu entwickeln. Schwer zu Debuggen. Schwer zu bekommen, die Funktionalität, die Sie wollen. Ich behalte lieber web-Anwendungen so einfach wie möglich und gehen für normale GUI-Anwendungen, wenn alles komplexer wird, benötigt.
ExtJS, YUI, dojo... frameworks bieten grundsätzlich eine hand in der Umsetzung apps wie die, die du beschreibst
Wir(an meinem Arbeitsplatz) verwendet, ein solcher Ansatz erfolgreich für viele große & kleine Skala-apps... Im Allgemeinen stützen die meisten unserer app auf ExtJS+jQuery, in einigen Fällen auf dojo(Zend Framework(wenn Sie auf PHP-Welt überhaupt) bieten praktische integration mit dojo-Elemente)
Wenn es nicht missbraucht wird und nur eingesetzt wird, für den Willen, Sie zu benutzen oder das stoßen der coolness-Faktor - es ist ein geiles tool.
Mit der richtigen design ist es weder schwer noch langsamer als ein Ansatz, per se.
Ich am Liebsten ein hybrid-Ansatz. Wenn eine Seite zum ersten mal angefordert, es soll gefüllt werden mit so viel Informationen wie möglich zu schließen, von der URL/Querystring/Post. Und dann werden alle nachfolgenden Zustandsänderungen abgefragt werden können und aktualisiert mittels Ajax.
Viele Menschen neigen dazu, den Ansatz einfach das laden der Seite, und dann lassen Sie die javascript - /ajax-die Arbeit des Ladens. Dies führt in der client wartet auf die Seite zu laden, und dann den client zu warten, für die Daten zu laden.
Viel besser, nur lassen Sie den server tun, dass die anfänglichen Daten geladen, und füllen Sie alle UI-Elemente.
Wenn ich verstehe deine Frage richtig ich glaube du bist bezogen auf die Art der Entwicklung, die man tut mit so etwas wie ExtJS. Mit Ext Sie nicht mehr wirklich schreiben, beliebigen HTML -, sondern design der gesamten Anwendung in meist JavaScript, unter Verwendung von Techniken, ähnlich der Entwicklung von GUI-Anwendungen auf dem desktop.
Für die meisten ein Teil der modernen toolkits haben fast eliminiert die meisten browser-Macken. Sie können zwar sicherlich noch ausführen, in cross-browser-rendering-Probleme gelegentlich, es ist nicht annähernd so ein großes problem wie es wäre, wenn Sie versucht, zu schreiben, all das JS selbst. Die Geschwindigkeit sollte akzeptabel sein, auch im IE6, obwohl Sie allgemein eine bessere Leistung in einer aktuellen version von Safari, Chrome oder Firefox. (Ich weiß nicht genug über den IE7 oder 8 zu kommentieren).
Brachten Sie einen gültigen Punkt, aber über URLs und deren teilen-Fähigkeit. Auch außerhalb des Einsatz-bei der Freigabe von Daten das ist wichtig, um ein Lesezeichen für Standorte innerhalb der Anwendung. Es gibt Techniken, die verfügbar für die Speicherung, den Zustand der Anwendung und in der Lage zu rekonstruieren, aber soweit ich weiß, es ist noch nicht leicht zu machen. Aus diesem Grund macht es Sinn, zu vermeiden, reiche web-Anwendungen in Situationen, in denen Sie nicht notwendig sind. Einfacher web-Anwendungen einfacher zu Debuggen, zu testen und zu pflegen.
Dieser sagte, gibt es Situationen, in denen reiche web-Anwendungen machen sehr viel Sinn. Zum Beispiel eine Menge von internen enterprise-desktop-Anwendungen geschrieben werden kann Reich werden web-Anwendungen. Sie können ähnlich Aussehen und Verhalten von widgets und Interaktionsmuster als desktop-Anwendungen den Umstieg auf eine web-Anwendung erleichtert. Nach außen gerichteten Anwendungen, in denen das manipulieren von Daten (wie E-Mail - /news-Reader, accounting-Anwendungen, etc.) kann auch eine tolle Passform.
Intern verbraucht line-of-business-apps, bei denen Sie kontrollieren können, den desktop, javascript Sinn macht.
Für externe /öffentliche zugängliche apps, wo Sie keine Ahnung haben, welchen browser Ihre Kunden verwenden, halten Sie es tot einfach und so wenig wie möglich.
Wenn Sie sagen, dass Javascript funktioniert einfach nun aufgrund der Rahmenbedingungen, das stimmt nicht ganz. IE 6 ist immer noch weit verbreitet, wie ältere Safari. Auch FF 2.x, und 1.x teilweise, hat angemessenen Anteil von den consumer-Markt.
Zusammen mit, dass, nicht jeder hat high-speed-internet, das ist so ziemlich eine Voraussetzung für viele dieser frameworks. Weiter, obwohl die meisten Bibliotheken funktionieren mit IE 7, es ist ein Hund für die meisten Operationen.
Auf das Thema Bibliothek Größe, haben wir eine Reihe von .net-Steuerelemente, die wie zu injizieren, bis zu 1MB von javascript an den client. Versucht zu senden, dass zu Oma.
Schließlich, Telefone abholen-Benutzer als primären internet-Zugang-Gerät. Leider ist die cache-Größe ist klein und für die meisten Teil, diese coolen javascript-Dinge, die nicht allzu gut funktionieren.
Den YUI Theater hat ein video, dass ich denke, ist äußerst relevant für Ihre Frage, die ich dringend empfehlen, ihn anzuschauen
High-performance JavaScript: Warum Alles, was Sie bisher Gelehrt wird, Ist Falsch
Der Titel ist ein bisschen irreführend, aber er spricht tatsächlich über die Probleme, die Sie gegenüberstellen.