Vantaggi e svantaggi della creazione di un'applicazione web a pagina singola [chiusa]

52

Mi sto avvicinando alla fine di una fase di prototipazione / proof of concept per un progetto parallelo su cui sto lavorando e sto cercando di decidere su alcune decisioni di progettazione di applicazioni su larga scala. L'app è un sistema di gestione del progetto più adatto al processo di sviluppo agile. Una delle decisioni che devo prendere è se andare o meno con un'applicazione tradizionale a più pagine o un'applicazione a singola pagina.

Attualmente il mio prototipo è una tradizionale configurazione multi-pagina, tuttavia ho cercato di backbone.js di ripulire e applicare alcune strutture al mio codice Javascript (jQuery). Sembra che mentre backbone.js può essere utilizzato in applicazioni multipagina, brilla di più con le applicazioni a singola pagina. Sto cercando di trovare un elenco di vantaggi e svantaggi dell'utilizzo di un approccio di progettazione di applicazioni a singola pagina. Finora ho:

Vantaggi

  • Tutti i dati devono essere disponibili tramite una sorta di API - questo è un grande vantaggio per il mio caso di utilizzo, in quanto voglio comunque avere un'API per la mia applicazione. Al momento circa il 60-70% delle mie chiamate per ottenere / aggiornare i dati vengono effettuati tramite un'API REST. Fare un'applicazione a una sola pagina mi consentirà di testare meglio la mia API REST poiché l'applicazione stessa la userà. Significa anche che man mano che l'applicazione cresce, l'API stessa crescerà poiché questo è ciò che l'applicazione utilizza; non è necessario mantenere l'API come componente aggiuntivo dell'applicazione.

  • Applicazione più reattiva - poiché tutti i dati caricati dopo la pagina iniziale sono ridotti al minimo e trasmessi in un formato compatto (come JSON), le richieste di dati dovrebbero generalmente essere più veloci e il server eseguirà un po 'meno elaborazione.

Svantaggi

  • Duplicazione del codice - ad esempio, codice del modello. Dovrò creare modelli sia sul lato server (PHP in questo caso) che sul lato client in Javascript.
  • Logica di business in Javascript - Non posso fornire esempi concreti sul perché questo sarebbe male ma semplicemente non mi sembra giusto avere la logica di business in Javascript che chiunque può leggere.
  • Perdite di memoria Javascript - poiché la pagina non si ricarica mai, possono verificarsi perdite di memoria Javascript e non saprei nemmeno da dove iniziare a eseguirne il debug.

Ci sono anche altre cose che sono una specie di spade a doppio taglio. Ad esempio, con le applicazioni a pagina singola, i dati elaborati per ciascuna richiesta possono essere molto meno poiché l'applicazione richiederà i dati minimi necessari per la richiesta specifica, tuttavia ciò significa anche che potrebbe esserci una richiesta molto più piccola per il server. Non sono sicuro che sia una cosa buona o cattiva.

Quali sono alcuni dei vantaggi e degli svantaggi delle applicazioni web a pagina singola che dovrei tenere a mente quando decido in che modo andare per il mio progetto?

    
posta ryanzec 16.04.2012 - 19:39
fonte

5 risposte

17

Il più grande svantaggio è che il client deve avere JavaScript abilitato ed essere abbastanza potente da eseguirne una buona parte. È anche più difficile soddisfare i problemi di accessibilità o qualsiasi altra cosa che si basa sull'analisi dell'HTML statico (sebbene qualcosa che sappia che la tua specifica API può probabilmente fare meglio dello scraping HTML). Infine, è più facile avere perdite di memoria significative.

Per quanto riguarda la duplicazione del codice o l'inserimento della logica di business sul client, non sono sicuro di quanto devi fare. Se il modello sul client è un modello di vista (un modello che corrisponde al mondo come l'interfaccia utente lo vede, non un modello di business), la logica che corrisponde a ViewModel fino al modello di business può risiedere sul client, il server, o un po 'di entrambi. Dipende da come pensi che la tua API contenga una facciata specifica per il cliente e che il client traduca gli input dell'interfaccia utente in chiamate API.

Potresti anche voler dare un'occhiata a knockout.js. Non posso dire se è meglio della dorsale, ma potrebbe adattarsi meglio al tuo progetto.

    
risposta data 16.04.2012 - 20:29
fonte
7

Svantaggi che vedo spesso con applicazioni Web a pagina singola:

  • Impossibilità di collegarsi a una parte specifica del sito, spesso c'è solo 1 punto di accesso.
  • Pulsanti indietro e avanti disfunzionali.
  • L'uso delle schede è limitato o inesistente.

(soprattutto mobile:)

  • impiega molto tempo per caricare.
  • Non funziona affatto.
  • Impossibile ricaricare una pagina, un'improvvisa perdita di rete ti riporta all'inizio del sito.

Tutti questi possono essere risolti, ma da quello che ho visto, la maggior parte dei sitebuilder non lo fanno.

    
risposta data 23.01.2014 - 16:54
fonte
5

C'è un client importante che non esegue mai Javascript: crawler di Google (dal 2012) . (Anche Bing's non esegue JS, suppongo.)

Dovrai fornire una versione ragionevole non AJAX di ogni pagina che deve essere indicizzata o collegamenti a una pagina che deve essere indicizzata.

Se il tuo sito è di piccole dimensioni, puoi fornire versioni di base di poche pagine solo per l'indicizzazione dei bot.

Se la maggior parte dei contenuti del sito è riservata agli utenti registrati, o non è necessario indicizzarli per altri motivi, puoi creare l'intero spazio non indicizzato come app di una sola pagina, con la tua ricerca, il blackjack, ecc.

Se nessuno di questi due, è meglio sviluppare un sito multipagina sin dall'inizio e fornire solo aggiornamenti AJAX dove non cambia lo "scopo generale" della pagina.

    
risposta data 16.04.2012 - 21:45
fonte
3

-Duplication of code - For example, model code. I am going to have to create models both on the server side (PHP in the case) and the server side in javascript.

Sei nel mondo di PHP ma ci sono strategie di generazione del codice nel mondo .NET per la creazione automatica di proxy WCF JavaScript. Vedi qui

Non so quali opzioni potrebbero essere disponibili per non dover creare gli oggetti remoti da soli in JavaScript in un'applicazione PHP, ma questa è un'opzione per coloro che scrivono applicazioni a pagina singola in .NET.

    
risposta data 16.04.2012 - 19:49
fonte
0

La scelta non deve essere l'una o l'altra. JWt è ad esempio un toolkit web che implementa la perfetta illusione di una pagina web a più pagine, ma è una singola pagina. Inoltre, riconoscerà i robot di Google e i browser che non dispongono di javascript (provalo) e passeranno al tradizionale modello a più pagine quando li rileva.

In breve:

  • non è necessario scrivere un'API (ma puoi ancora, se vuoi)
  • applicazione reattiva: ogni clic utente ha bisogno al massimo di un server di andata e ritorno (oltre al recupero di immagini)
  • nessuna duplicazione di codice
  • nessuna logica di business lato client
  • complessità minima lato client
  • i robot di ricerca possono indicizzarlo
risposta data 24.04.2012 - 10:20
fonte

Leggi altre domande sui tag