Le applicazioni web JavaScript (principalmente) lato client sono più lente o meno efficienti?

1

Sono nel bel mezzo di scrivere un'applicazione web per lavoro. Tutto è da zero. Sono stato un programmatore PHP per circa 13 anni, programmatore Node.js per gli ultimi 2 anni, e non ho carenza di esperienza con JavaScript. Adoro Node.js e di recente ho ricostruito l'API della società in esso ...

Quindi, nel pianificare questa applicazione web, l'approccio che sto considerando è avere l'API Node.js per ottenere dati dal server, ma renderizzare tutto nel browser. Utilizza AJAX per il recupero dei dati, l'API della cronologia per il caricamento delle pagine e un pattern simile a MVC per i diversi componenti.

Ho letto articoli che descrivono i twitter ricostruiti alcuni anni fa. Era più o meno un'app JavaScript sul lato client, ma un paio d'anni dopo il suo avvio, hanno iniziato a spostare un sacco di elaborazione / rendering sul server, sostenendo che l'app migliorava notevolmente in termini di velocità.

Quindi, la mia domanda è come chiede il titolo, è un'app centrata sul client sostanzialmente più lenta?

    
posta rpaskett 07.02.2014 - 08:25
fonte

3 risposte

3

La risposta è che è interamente situazionale.

La complessità e la portata dell'interazione dell'utente, l'esperienza del cliente, la funzionalità dell'applicazione, il carico del server, i problemi di sicurezza e altri fattori devono essere presi in considerazione per rispondere a questa domanda con qualsiasi grado di accuratezza.

Per essere onesti questa domanda non dovrebbe essere risolta in termini generalizzati - non c'è una risposta sbagliata. Se puoi fornire maggiori dettagli sulla natura dell'applicazione, potremmo essere in grado di dare qualche consiglio utile.

    
risposta data 07.02.2014 - 11:28
fonte
3

Se stai eseguendo il rendering lato server in formato HTML, la tua architettura è la seguente:

  1. L'utente richiede l'URL, il server genera l'HTML per la pagina completa
  2. Browser esegue il rendering HTML, la pagina viene mostrata, javascript è inizializzato
  3. Javascript aggiunge gestori di eventi, la pagina è interattiva

Se stai eseguendo il rendering lato client, la tua architettura si presenta così:

  1. L'utente richiede l'URL, il server genera l'HTML per la pagina del contenitore
  2. Il browser esegue il rendering del contenitore vuoto ("caricamento in corso ..."), javascript viene inizializzato
  3. Javascript esegue il routing, ricava la pagina che l'utente deve vedere, lancia una richiesta giusta per il contenuto
  4. Il contenuto viene restituito, il gestore javascript lo esegue e lo inserisce nella pagina
  5. Javascript aggiunge gestori di eventi, la pagina è interattiva

Puoi collegare le cose un po 'inserendo i dati iniziali nella pagina, ma la realtà è che con il rendering lato client la pagina viene sempre sottoposta a rendering due volte, una volta per il container per avviare un ambiente e una volta nel tuo javascript templating codice per il contenuto effettivo, che è ancora una volta rispetto a un'architettura di rendering lato server.

Ciò significa che se si ha una situazione in cui è probabile che gli utenti richiedano una pagina e poi si allontanino dopo averlo letto, come con Twitter, sono mal servite dal rendering lato client, perché la prestazione è sempre inferiore a server- rendering laterale (a condizione di ottimizzare entrambi nello stesso modo, ove possibile).

Tuttavia, se ci si aspetta che gli utenti rimangano sulla pagina, caricando più dati pezzo per pezzo e con una ricca interazione con tali dati, come una tipica app Web, il rendering lato client può essere un'architettura migliore per la consegna del stesso set di funzionalità più veloce. Spesso è più semplice implementare la logica di gestione di rendering / evento se è tutto nella stessa codebase lato client, e non c'è un grande svantaggio delle prestazioni.

    
risposta data 07.02.2014 - 13:50
fonte
0

Un'applicazione client centrica tende a generare molto più traffico di rete rispetto a un'applicazione server centrica che invia solo il risultato finale dell'elaborazione al client.
Questa applicazione client centrica effettuerà spesso più chiamate di rete, ciascuna con più dati, rispetto all'applicazione centrata sul server.
Poiché la latenza della rete è spesso il maggior collo di bottiglia delle prestazioni per le applicazioni, che spesso porta a prestazioni lato client più lente.

Un'altra cosa da considerare è la sicurezza. Praticamente ogni bit di validazione che fai sul client dovrà essere ripetuto sul server. Se non si ottiene la situazione infame in cui un cliente riempie il suo carrello della spesa sul cliente, modifica l'importo da pagare per essere negativo, quindi invia l'intera cosa e il server, beato ignaro di tutto ciò che non va paga il cliente E gli invia i prodotti .
Questo potrebbe o meno essere un problema per il tuo sistema, a seconda di cosa fa e di come è destinato ad essere protetto.

Nel complesso, quindi, è meglio limitare la quantità di dati trasmessi tra client e server sia in volume che in numero possibile di richieste (un numero elevato di piccole richieste potrebbe richiedere un'interfaccia utente apparentemente più veloce, si pensi all'invio parziale della pagina, nonostante sia tecnicamente più lento nel tempo totale della CPU necessario).

    
risposta data 07.02.2014 - 11:39
fonte

Leggi altre domande sui tag