In primo luogo, una nota sull'app che sto per discutere: è abbastanza grande, dell'ordine di grandezza di un'app di servizio come Airbnb - cioè, non è solo una pagina web statica, è un'applicazione web completa . È nelle prime fasi di sviluppo.
Ecco la domanda:
Sto per iniziare un rigoroso tuffo nello sviluppo front-end e voglio essere certo che mi stia posizionando sulla strada giusta. Il back-end è costruito con il design Spring MVC, e il lavoro front-end limitato che ho fatto finora utilizza Twitter Bootstrap in JSP e qualche semplice JavaScript. Non ho avuto problemi di per sé con quello stack, ma ho le seguenti preoccupazioni:
Facilità e / o standardizzazione dello sviluppo
La sintassi JSTL richiesta per rendere le pagine altamente interattive tramite JSP sta diventando terribilmente ingombrante. Sono preoccupato che, quando espandiamo il nostro progetto e portiamo avanti altri ingegneri, ci sarà una curva di apprendimento iniziale ripida, seguita da un rallentamento persistente nel processo di sviluppo a causa della verbosità di JSTL.
L'utilizzo di JSP sembra anche un approccio meno contemporaneo allo sviluppo front-end, alla luce di quanti framework JS sono popolari. Immagino che sarebbe più difficile schierare un team di ingegneri front-end o full-stack se costruissimo con JSP.
Non dovrei preoccuparmi così tanto di questi problemi? Esistono vantaggi del rendering lato server con JSP che superano le preoccupazioni degli sviluppatori? Puoi dare un'idea di quanto sia diffusa la familiarità con gli sviluppatori di JSP?
Prestazioni
Il rendering lato server è stato eccezionale per i miei test, ma cosa succede quando la nostra app è un enorme successo storico e globale e un vero e proprio fenomeno? Il server si impantanerà con tutto il rendering, se fatto in JSP? Oppure i problemi di traffico sono meglio affrontati dalle richieste di bilanciamento del carico al server e lasciando il rendering lato server in posizione?
Costi di manutenzione per il rendering lato server da un server ospitato su cloud
Sulla falsariga delle preoccupazioni sopra riportate, se l'app ottiene molto traffico e sta visualizzando le visualizzazioni lato server, l'utilizzo della larghezza di banda non aumenterà? Ci schiereremo su AWS, che è per me un territorio semi-sconosciuto, ma suppongo che pagheremo in base alla larghezza di banda che consumiamo. Spingere i compiti di rendering delle visualizzazioni sui browser client sembra una strategia economica per un'app ospitata sul cloud come la nostra. Mi sbaglio in quel modo di pensare?
Compatibilità tra browser
La nostra app sarà commercializzata per clienti che non hanno familiarità con la tecnologia. Penso che sia ragionevole presumere che tali client avranno sproporzionatamente probabilità di avere browser scaduti. I vecchi browser potrebbero avere problemi di compatibilità con il rendering di JavaScript e problemi ancora peggiori con i più moderni framework JS.
Esistono sufficienti soluzioni di compatibilità nei moderni framework JS per risolvere questo problema? Oppure il rendering lato server è la migliore, vista la probabilità di essere eseguito su browser obsoleti?
Dopo aver fatto qualche ricerca su questi argomenti, ho in mente quattro strategie, per andare avanti:
-
Evita il rendering lato client. Impara ad amare il chunkiness di JSTL, rimani con tutti i JSP.
-
Segna tutti gli elementi HTML statici nelle JSP, quindi compila valori / proprietà / elementi generati dinamicamente in base all'interazione dell'utente (un sacco di JS, AJAX).
-
Crea un markup HTML minimo nelle JSP, quindi compila tutto nella vista con gli allegati al DOM quando la pagina viene caricata.
-
Completa la migrazione da JSP, usa qualcosa come AngularJs.
Fondamentalmente, tutte le opzioni rappresentano vari gradi di allontanamento dal rendering lato server e verso il rendering lato client. Quale di questi suona come la migliore linea d'azione? C'è un'opzione che ho trascurato?
È ancora abbastanza presto nel processo di sviluppo front-end per integrare completamente nuovi tech, e sono abbastanza nuovo per il web dev che qualsiasi strategia implicherà un considerevole autoapprendimento, quindi niente dovrebbe essere considerato fuori dal tavolo. Sono propenso alla soluzione numero 2, finora, in quanto questo modello sarebbe il meno drastico cambiamento rispetto all'attuale approccio. Tuttavia, nell'interesse di costruire in un modo che renderà le build future più facili e più accessibili per la collaborazione, anche il n. 4 è bello.