2010-02-13 10 views
6

Sto pensando di creare un sito web con la complessità di Facebook che dovrebbe essere in grado di scalare in milioni di utenti. La mia domanda è: c'è qualche ragione per non utilizzare Adobe Flex per progetti così grandi oltre al punto ovvio di richiedere a tutti di installare Flash e non dover fare affidamento su Adobe? Dal mio punto di vista, Adobe Flex ridurrebbe il carico del server per Facebook, perché più del lavoro potrei fare sul lato client. Sei d'accordo?Facebook potrebbe essere stato implementato in Adobe Flex?

+3

Sono davvero contento che non sia stato implementato in Flex, non sarebbe in grado di utilizzare Facebook sul mio SO open source. – Earlz

risposta

7

Naturalmente Facebook avrebbe potuto essere implementato in Flash. Ma allora la domanda è che sarebbe riuscita? Ci sono ragioni per cui le grandi compagnie web come Google, Facebook e Yahoo usano Flash solo il meno possibile.

La cosa che temo di più è l'alienazione degli utenti. Il plugin Flash non è il miglior software in circolazione. È lento e probabilmente si blocca di tanto in tanto. Se la tua app diventa più grande potresti ottenere dei tempi di caricamento che potrebbero non essere accettabili per i tuoi utenti. Inoltre, a mio parere, i siti Flash completi non si sentono corretti perché si comportano diversamente dai siti Web HTML. Tutti i grandi siti Web come Google, Flickr, Stackoverflow o Facebook si sentono molto leggeri e chiari, il che è molto elegante e compensa una grande fruibilità.

E quindi HTML e JavaScript sono molto più flessibili. Vuoi che il tuo sito web sia disponibile su smartphonse? L'iPhone non ha Flash e anche con i telefoni hai il problema che gli utenti molto probabilmente odieranno un sito Flash completo poiché quei telefoni non ridimensionano necessariamente Flash così come aumentano le dimensioni di HTML e Flash attira la batteria come un matto. Se qualcuno presenta un'altra rivoluzione come gli smartphone, puoi essere sicuro che supporti HTML e JavaScript, ma non puoi essere così sicuro di Flash.

Quindi la domanda è: come guadagneresti l'efficienza? Naturalmente puoi scrivere la tua interfaccia utente con Flex e chiamare semplicemente servizi web molto leggeri come se li usassi per AJAX e puoi anche memorizzare in cache parte del contenuto del sito in modo da non trasmettere più dati necessari per l'interazione dell'utente (l'interfaccia utente viene trasmessa una sola volta). Ma puoi farlo anche con JavaScript. Puoi scrivere la tua interfaccia utente in HTML e JavaScript, caricarla una volta e poi semplicemente estrarre i dati JSON nudi dai server e renderli utilizzando JavaScript.Puoi anche recuperare molti di questi dati in anticipo per ottenere il numero di richieste. Ma ancora un simile approccio ha i suoi svantaggi. Hai mai notato che quando si digita una risposta su StackOverflow e qualcun altro invia una risposta, si riceve una notifica mentre si digita la risposta. Tali funzionalità in tempo reale sono molto interessanti e potresti volerlo a un certo punto nel tempo, il che significa più interazione con il server.

Ma qualunque cosa tu faccia i tuoi server devono ancora scalare se il tuo sito cresce. Anche se riduci al minimo il numero di richieste GET che colpiscono i tuoi server, continueranno a crescere molto quando il tuo sito diventerà popolare e avrai bisogno di molti server per gestirti, migliorando il rapporto utenti/server. Il punto più interessante è che Flex è molto più facile da programmare rispetto ad AJAX (pensiamo ad esempio alle incompatibilità con i browser) e comunque AJAX non è stato solo inventato, ma il mondo intero ha problemi con tutti i problemi che ne derivano invece di usare Flettere. Penso che questo dica molto del valore del risultato ottenuto durante la creazione di un sito Web completo in Flash.

4

Vai a Facebook e vedi sorgente ... vedi tutto questo JavaScript? Tutto ciò che funziona lato client

+0

Ma cose come il multithreading sono per quanto ne so supportate solo con GoogleGears. Ciò significa che l'utiizzazione del cliente sarà molto più complicata. – David

+0

@David, credo che il tuo codice lato client sovrautilizzo ... Non dovresti aver bisogno di codice multi-threading per essere eseguito in un browser per tutti gli scopi pratici. (sai che non supponiamo di creare query SQL sul lato client, vero?) – Earlz

+0

il tuo client chiamerebbe un servizio sul server che potrebbe essere parallelizzato lì .. per quanto ne sai il client è ancora in esecuzione una casella PIII 600 MHZ. . – SQLMenace

2

Flex è la GUI per il client. Hai ancora bisogno di spazio di archiviazione sul lato server e questo è ciò che deve essere scalato. L'interfaccia utente potrebbe essere in Flex, mentre la maggior parte degli utenti non gradirà tali interfacce.

+0

La cosa familiare, è un buon punto. – David

+0

Non riesco a ottenere i downvotes qui (forse l'affermazione argomentativa su "gli utenti non apprezzeranno tali interfacce"?) Il problema fondamentale di client vs. server è un punto molto valido. – jeroenh

1

Dovrai eseguire una versione personalizzata del tuo sito per l'iPad/iPhone.

Esistono altri modi per spostare il carico sul lato client. Javascript ti darà mal di testa, ma meno di allontanarti dall'intera architettura come Flex.

OTOH quando ottieni un milione di utenti avrai le risorse per reimplementare il tuo sito.

+0

Supporto Ipad/iphone è un punto eccellente. Reimplementare un sito non è mai favorevole, anche con risorse quasi illimitate. – David

+0

Scusate, ero un po 'faceto :-) La risposta corretta è che quando avete "milioni di utenti", sarete in grado di pagare qualcun altro per reimplementarlo per voi, o venderlo a Google :-) –

+0

A proposito, penso che facetious sia un nome eccellente per un clone di Facebook :-) –

4

Johannes ha ragione a sottolineare la differenza tra server e client. Il lato server è ciò che deve essere scalato.

Ad esempio, il team Microsoft Silverlight ha assemblato un facebook client app in silverlight (utilizzando l'API pubblica di Facebook). Il mio punto è che, usando le tecnologie di oggi, è del tutto possibile scrivere un'applicazione web che si rivolge a diversi tipi di tecnologie client: browser web classici (HTML/javascript), "applicazioni internet ricche" (flex, silverlight), ...

Vedi anche la miriade di client Twitter là fuori.

+0

Mi piace il tuo punto di utilizzo di molti clienti. Tuttavia, aggiunge complessità. – David

4

La società per cui lavoro ha una grande app in Flash utilizzata dai governi. È molto difficile da mantenere e talvolta fallisce. Il problema sono tutti i file .fla e .as che devono essere modificati solo per fare una piccola modifica. Sì, l'app avrebbe potuto essere costruita meglio, ma anche così, è ancora più difficile da gestire rispetto a un front-end HTML/JavaScript.

Mentre amo scrivere app Flash/Flex, credo che dovrebbero integrare un sito e non essere il sito.

L'utilizzo di un buon framework JavaScript come jQuery elimina la questione di compatibilità del browser (per la maggior parte) e consente un sacco di funzionalità.

+0

Perché è necessario aggiornare più file quando un sito è implementato in Flex? Il tuo punto è che la creazione di una buona architettura in Flex è più difficile rispetto a HTML/Javascript? – David

+0

Questo è in Flash ma lo stesso potrebbe accadere in Flex. Ci sono file SWF che contengono l'interfaccia utente e la logica dell'interfaccia utente, quindi i file AS che contengono la logica aziendale. Questi file AS devono comunicare con un livello database lato server (PHP in questo caso). Ciò significa che se hai un problema è nel PHP, AS o SWF. Mentre un'app PHP di solito ha solo una classe PHP per i dati e una pagina dell'interfaccia utente per comunicare con quella classe. –

1

Non penso che si vedrebbe un vantaggio in termini di prestazioni con un sito come Facebook, perché il contenuto è altamente dinamico, proviene da molti luoghi diversi e viene creato da molte entità indipendenti. Flash (e quindi Flex) è migliore per le app monolitiche da una singola fonte che non devono essere cambiate molto spesso.

Il valore predefinito in Flash consiste nel creare tutto in un unico file .swf che contiene tutto. È possibile uscire da questo comportamento predefinito, ovviamente. È possibile effettuare chiamate di servizi Web, inserire componenti esterni tramite il meccanismo SWC, caricare contenuto statico tramite HTTP, ecc. Tuttavia, non è il modello predefinito, che influisce sul funzionamento delle librerie e degli strumenti di sviluppo di Flash. Inoltre, più ne fai, meno il vantaggio di "eseguire tutto ciò che è possibile sul lato client". Viene assorbito dal sovraccarico della connessione HTTP.

L'impostazione predefinita sul semplice vecchio Web basato sugli standard è di archiviare tutte le risorse separatamente e assemblarle dinamicamente sul client. Questo è uno dei motivi per cui il web è lento - di nuovo, tutto il sovraccarico della connessione HTTP - ma anche perché è flessibile e dinamico. Si accoppia bene con un sito come Facebook che richiede un'evoluzione costante da parte di molti sviluppatori indipendenti.

Dico questo avendo sviluppato un'app Flex, di cui sono soddisfatto. Solo una persona - io - deve mantenerla, ed è naturalmente un'app monolitica. Gioca direttamente nei punti di forza di Flex.

+0

Punti eccellenti. Grazie – David