'Coppia (possibilmente opiniated) nota dal 2013:
applicazioni Web non dovrebbero essere sviluppate in modo diverso rispetto a qualsiasi altra applicazione.
Prendere qualsiasi applicazione di livello 2+ (qualsiasi normale modello client-server farebbe); ha senso elaborare le cose sul client o sul server?
Considerazioni sulle prestazioni
Si deve prendere in considerazione la potenza di elaborazione, la latenza di rete, larghezza di banda, memoria e limitate capacità di magazzinaggio. A seconda dell'applicazione, è possibile scegliere diversi compromessi.
Un fat client di solito permetterà di elaborare più sul client e scaricare il server, serializzare payload dei messaggi più efficaci, e ridurre al minimo andata e ritorno, il tutto a costo di potenza di elaborazione, l'efficienza della memoria, e, eventualmente, lo spazio di archiviazione.
Considerazioni sulla sicurezza
Security è transitorio, a prescindere dal modello utilizzato, ciascuna parte (non solo il server) dovranno sempre verificare e, eventualmente, disinfettare i dati che riceve dagli altri in una certa misura. Per molte applicazioni Web, ciò significa convalidare entità con logica aziendale, ma non sempre. Questo dipende da cosa sono i dati e da chi ha autorità su di esso (e non è sempre il server).
Poiché il browser Web già verifica molte informazioni, le considerazioni sul lato client sono meno, ma non dovrebbero essere dimenticate (specialmente in un client che esegue XHR o utilizza WebSockets, dove c'è meno hand-holding).
A volte, ciò significa che effettivamente sia il server che il client convalideranno gli stessi dati. Questo va bene. Se sviluppi software su entrambi i lati, puoi estrarre il codice di convalida su un modulo utilizzato sia dal client sia dal server (come tutti questi moduli "comuni" nei pacchetti software tradizionali). Poiché la scelta della lingua è limitata sul lato client in un ambiente Web, potrebbe essere necessario scendere a un compromesso. Detto questo, è possibile eseguire Javascript sul server, o compilare molte lingue in Javascript usando cose come Emscripten (vedi anche amd.js), o persino eseguire codice nativo in un futuro incerto usando cose come NaCl/PNaCl.
Conclusione
trovo che aiuta a pensare a client di applicazioni Web come 'immediatamente installato', 'zero conf' e clienti 'continuamente aggiornata-'. Non usiamo questa terminologia per il web perché queste proprietà erano sempre intrinseche al classico software basato sul web, ma non erano per il classico software nativo. Allo stesso modo, non utilizziamo termini come "Applicazioni a pagina singola" quando sviluppiamo software nativo perché non è mai stato necessario riavviare l'intera applicazione ogni volta che era necessario passare a una nuova schermata con un software classico.
Abbracciare la convergenza e mantenere una mente aperta; persone provenienti da diverse comunità impareranno molto l'una dall'altra nei prossimi anni.
Ciò significa che è necessario mantenere le regole di convalida su ** entrambi i lati ** (client x server). – rsenna