2010-02-13 4 views
6

Ich überlege mir, eine Website mit der Komplexität von Facebook zu erstellen, die in die Millionen von Benutzern skalierbar sein soll. Meine Frage ist: Gibt es irgendeinen Grund, Adobe Flex nicht für solch ein großes Projekt zu verwenden, abgesehen von dem offensichtlichen Grund, dass jeder Benutzer Flash installiert und nicht auf Adobe angewiesen ist? Aus meiner Sicht würde Adobe Flex die Serverlast für Facebook reduzieren, weil mehr von der Arbeit auf der Client-Seite erledigt werden könnte. Sind Sie einverstanden?Könnte Facebook in Adobe Flex implementiert worden sein?

+3

Ich bin wirklich froh, dass es nicht in Flex implementiert wurde, würde es saugen nicht in der Lage sein, facebook auf meinem Open-Source-Betriebssystem zu verwenden. – Earlz

Antwort

7

Natürlich könnte Facebook in Flash implementiert worden sein. Aber dann ist die Frage, wäre es gelungen? Es gibt Gründe, warum große Web-Unternehmen wie Google, Facebook und Yahoo Flash nur so sparsam wie möglich nutzen.

Die Sache, die ich am meisten fürchten würde, ist die Entfremdung der Benutzer. Das Flash-Plugin ist nicht das beste Stück Software. Es ist langsam und wahrscheinlich ab und zu abstürzen. Wenn Ihre App größer wird, können Ladezeiten auftreten, die für Ihre Nutzer möglicherweise nicht akzeptabel sind. Auch meiner Meinung nach fühlen sich ganze Flash-Seiten nicht richtig an, weil sie sich anders verhalten als HTML-Websites. Alle großen Websites wie Google, Flickr, Stackoverflow oder Facebook fühlen sich sehr leicht und glatt an, was sehr elegant ist und eine großartige Benutzerfreundlichkeit garantiert.

Und dann sind HTML und JavaScript viel flexibler. Möchten Sie, dass Ihre Website auf smartphonse verfügbar ist? Das iPhone hat kein Flash und selbst bei Handys, bei denen Sie das Problem haben, dass Benutzer eine volle Flash-Site hassen werden, da diese Telefone Flash nicht so gut skalieren, wie sie HTML skalieren und Flash zeichnet Batterie wie verrückt. Wenn jemand mit einer anderen Revolution wie Smartphones aufwartet, können Sie sicher sein, dass er HTML und JavaScript unterstützt, aber Sie können sich über Flash nicht so sicher sein.

Dann ist die Frage, wie würden Sie irgendeine Effizienz gewinnen? Natürlich können Sie Ihre Benutzeroberfläche mit Flex schreiben und nur sehr einfache Webservices aufrufen, wie Sie sie für AJAX verwenden, und Sie können sogar einen Teil des Inhalts der Site lokal zwischenspeichern, sodass Sie nicht mehr Daten für die Benutzerinteraktion übertragen (die Benutzeroberfläche wird nur einmal übertragen). Sie können das aber auch mit JavaScript tun. Sie können Ihre Benutzeroberfläche in HTML und JavaScript schreiben, sie einmal laden und dann einfach die nackten JSON-Daten von den Servern abrufen und sie mit JavaScript rendern.Sie können auch viele dieser Daten im Voraus abrufen, um die Anzahl der Anfragen zu verringern. Aber ein solcher Ansatz hat seine Nachteile. Hast du jemals bemerkt, dass wenn du eine Antwort auf stackoverflow eingibst und jemand anderes eine Antwort einreicht, wirst du benachrichtigt, während du deine Antwort tippst. Solche Echtzeitfunktionen sind sehr cool und Sie könnten dies zu einem bestimmten Zeitpunkt wünschen, was mehr Serverinteraktion bedeutet.

Aber was immer Sie tun müssen Ihre Server noch skalieren, wenn Ihre Website wächst. Selbst wenn Sie die Anzahl der GET-Anfragen minimieren, die Ihre Server treffen, werden sie immer noch stark anwachsen, wenn Ihre Site populär wird und Sie eine Menge an Servern benötigen, um Ihre Benutzer/Server-Verhältnisse zu verbessern. Der interessanteste Punkt ist jedoch, dass Flex viel einfacher zu programmieren ist als AJAX (denke zum Beispiel an Browser-Inkompatibilitäten) und trotzdem wurde AJAX nicht nur erfunden, sondern die ganze Welt vermasselt mit all den Problemen, die damit einhergehen Biegen. Ich denke, dies sagt viel über den Wert des Ergebnisses aus, das Sie beim Erstellen einer vollständigen Website in Flash erhalten.

4

Gehen Sie zu Facebook und sehen Quelltext ... sehen Sie all das JavaScript? Das alles läuft Client Seite

+0

Aber Dinge wie Multithreading werden soweit ich weiß nur mit GoogleGears unterstützt. Dies bedeutet, dass die Nutzung des Kunden viel komplizierter sein wird. – David

+0

@David, ich glaube, Ihr überbeanspruchender Client-Side-Code dann .. Sie sollten nicht Multi-Threading-Code in einem Browser für alle praktischen Zwecke ausgeführt werden müssen. (Sie wissen, dass Sie keine SQL-Abfragen auf der Client-Seite erstellen wollen, richtig?) – Earlz

+0

Ihr Client würde einen Dienst auf dem Server aufrufen, der dort parallelisiert werden könnte ... für alle, die Sie wissen, dass der Client noch eine PIII 600 MHZ-Box läuft. . – SQLMenace

2

Flex ist die GUI für den Client. Sie benötigen weiterhin serverseitigen Speicher und das muss skaliert werden. Die Benutzeroberfläche könnte in Flex sein, während die meisten Benutzer solche Schnittstellen nicht mögen.

+0

Die Vertrautheit Sache, ist ein guter Punkt. – David

+0

Ich bekomme die downvotes hier nicht (vielleicht die argumentative Aussage über "Benutzer werden solche Schnittstellen nicht mögen"?) Das grundlegende Problem von Client gegen Server ist ein sehr gültiger Punkt. – jeroenh

1

Sie müssen eine benutzerdefinierte Version Ihrer Website für das iPad/iPhone erstellen.

Es gibt andere Möglichkeiten, Lasten auf die Clientseite zu verschieben. Javascript wird Ihnen Kopfschmerzen bereiten, aber weniger als sich von der gesamten Architektur wie Flex wegzubewegen.

OTOH Wenn Sie eine Million Benutzer haben, haben Sie die Ressourcen, um Ihre Site neu zu implementieren.

+0

Ipad/iphone Unterstützung ist ein ausgezeichneter Punkt. Die Neuimplementierung eines Standorts ist niemals günstig, selbst bei nahezu unbegrenzten Ressourcen. – David

+0

Entschuldigung, ich war ein bisschen witzig :-) Die richtige Antwort ist, wenn Sie "Millionen von Nutzern" haben, können Sie jemanden bezahlen, um es für Sie neu zu implementieren, oder verkaufen Sie es an Google :-) –

+0

Übrigens finde ich witzig ist ein ausgezeichneter Name für einen Facebook-Klon :-) –

4

Johannes ist richtig, um den Unterschied zwischen Server und Client aufzuzeigen. Das Server-Side-Zeug muss skaliert werden.

Als Beispiel hat das Microsoft Silverlight-Team eine facebook client app in silverlight (mithilfe der öffentlichen API von Facebook) erstellt. Mein Punkt ist, mit den heutigen Technologien, ist es durchaus möglich, eine Web-Anwendung für viele verschiedene Arten von Client-Technologien zu schreiben: klassische Web-Browser (HTML/Javascript), "Rich Internet-Anwendungen" (Flex, Silverlight), ...

Siehe auch die unzähligen Twitter-Kunden da draußen.

+0

Ich mag deinen Punkt der Verwendung vieler Kunden. Es fügt jedoch Komplexität hinzu. – David

4

Die Firma, für die ich arbeite, hat eine große App in Flash, die von Regierungen verwendet wird. Es ist sehr schwer zu pflegen und scheitert manchmal. Das Problem sind alle .fla- und .as-Dateien, die nur geändert werden müssen, um eine kleine Änderung vorzunehmen. Ja, die App hätte besser gebaut werden können, aber trotzdem ist es noch schwieriger zu pflegen als ein HTML/JavaScript-Frontend.

Während ich gerne Flash/Flex-Apps schreibe, glaube ich, dass sie eine Seite ergänzen und nicht die Website sein sollten.

Die Verwendung eines guten JavaScript-Frameworks wie jQuery entfernt die Browserkompatibilitätsfrage (größtenteils) aus dem Bild und ermöglicht eine Menge Funktionalität.

+0

Warum müssen mehr Dateien aktualisiert werden, wenn eine Site in Flex implementiert wird? Ist Ihr Argument, dass das Erstellen einer guten Architektur in Flex schwieriger als in HTML/Javascript ist? – David

+0

Dies ist in Flash, aber das gleiche könnte in Flex auftreten. Es gibt SWF-Dateien, die die Benutzeroberfläche und die Benutzeroberflächenlogik enthalten, sowie AS-Dateien, die die Geschäftslogik enthalten. Diese AS-Dateien müssen mit einer serverseitigen Datenbankschicht (in diesem Fall PHP) kommunizieren. Das heißt, wenn Sie ein Problem haben, ist es entweder in PHP, AS oder SWF. Während eine PHP-Anwendung normalerweise nur eine PHP-Klasse für die Daten und eine UI-Seite hat, um mit dieser Klasse zu kommunizieren. –

1

Ich glaube nicht, dass Sie einen Leistungsvorteil mit einer Website wie Facebook sehen würden, weil der Inhalt sehr dynamisch ist, von vielen verschiedenen Orten kommt und von vielen unabhängigen Entitäten erstellt wird. Flash (und damit Flex) ist besser für monolithische Apps aus einer einzigen Quelle, die sich nicht oft ändern müssen.

Der Standard in Flash ist, alles in eine einzige SWF-Datei zu erstellen, die alles enthält. Es ist natürlich möglich, aus diesem Standardverhalten auszubrechen. Sie können Web-Service-Aufrufe durchführen, externe Komponenten über den SWC-Mechanismus abrufen, statische Inhalte über HTTP laden usw. Es ist jedoch nicht das Standardmuster, das die Funktionsweise von Flash-Entwicklungsbibliotheken und -tools beeinflusst. Je mehr Sie davon tun, desto weniger profitieren Sie davon. Es wird in HTTP-Verbindungs-Overhead aufgesogen.

Der Standard auf dem einfachen alten standardbasierten Web besteht darin, alle Assets separat zu speichern und dynamisch auf dem Client zu assemblieren. Dies ist einer der Gründe, warum das Web langsam ist - wieder, all der HTTP-Verbindungsoverhead - aber auch, warum es flexibel und dynamisch ist. Es passt gut zu einer Seite wie Facebook, die von vielen unabhängigen Entwicklern ständig weiterentwickelt werden muss.

Ich sage dies eine Flex-App entwickelt, mit der ich glücklich bin. Nur eine Person - ich - muss es pflegen, und es ist natürlich eine monolithische App. Es spielt direkt mit den Stärken von Flex.

+0

Ausgezeichnete Punkte. Vielen Dank – David