Quali sono i compromessi del rendering sul lato client rispetto al rendering sul lato server?

Answers

04/29/2024
Moor Bittinger

Dal momento che Google Plus e alcuni altri siti Web all'avanguardia ora rendono interamente sul client, esaminiamo perché il rendering sul lato server è assolutamente desiderabile.

Il rendering sul lato server indica che quando il browser recupera la pagina su HTTP, torna immediatamente all'HTML che descrive la pagina. Il rendering sul lato server è utile perché:

  1. Il tuo contenuto è visibile ai motori di ricerca come Google.
  2. La pagina carica più velocemente. Non esiste una "pagina bianca" mentre il browser scarica il codice di rendering e i dati ed esegue il codice.
  3. Mantiene l'idea le pagine sono documentie se chiedi a un server un documento per URL, ottieni il testo del documento anziché un programma che genera quel testo usando un'API complicata.

Il rendering sul lato client significa che JavaScript in esecuzione nel browser produce HTML o manipola il DOM. Il vantaggio è che puoi aggiorna lo schermo all'istante quando l'utente fa clic, anziché attendere alcune centinaia di millisecondi almeno mentre il server viene contattato per chiedere cosa visualizzare. I siti in cui navighi principalmente e visualizzi contenuti statici possono cavarsela con il rendering principalmente sul lato server, ma non riesco a pensare a nessun sito Web che non lo fa qualsiasi rendering lato client. Qualsiasi parte di una pagina che è animata o altamente interattiva (un dispositivo di scorrimento trascinabile, una tabella ordinabile, un menu a discesa) quasi certamente utilizza il rendering sul lato client.

Le persone di solito non si rendono conto non ci deve essere un compromesso. Perché non visualizzare lo stato iniziale della pagina sul server, i widget interattivi e tutto il resto, quindi eseguire nuovamente il rendering delle parti che devono essere aggiornate sul client? Sebbene sia tipico renderizzare la carne di una pagina sul server e poi "migliorarla" sul client con una libreria come jQuery, è raro che un sito esegua le stesse attività di rendering sul server e sul client come appropriato.

Il motivo per cui il rendering sul lato server e sul lato client non è in genere misto è che in genere vengono eseguiti in ambienti di programmazione diversi, in genere in linguaggi diversi. Ad esempio, quasi tutti i siti Web eseguono il rendering del layout di pagina generale e del contenuto, come post di blog, sul server, generando HTML in una lingua come Ruby, PHP o Python. D'altra parte, un widget di chat o una galleria di immagini potrebbero essere scritti interamente in JavaScript sul lato client, mentre sarebbe sicuramente un dispositivo di scorrimento o un editor di testi.

Per i siti Web che fondono contenuto statico navigabile e interattività simile a un'app (o per le aziende che cercano di fornire un ulteriore livello di sanità mentale per i loro ingegneri e progettisti), questa divisione diventa un grosso problema. Questo è il motivo per cui Google Plus esegue tutto il rendering sul client. Quora esegue abilmente quasi tutto il rendering sul server (anche quando, ad esempio, fai clic su un pulsante "Segui"), ma solo le parti aggiornate vengono inviate al client. (Widget particolari come l'editor e il cursore "Promuovi" che forniscono un feedback immediato sono chiaramente lato client.) Nel tentativo di aumentare la reattività e la flessibilità, molti siti ora rendono i modelli Ruby sul server e i modelli Backbone sul client per diverse parti di la stessa interfaccia utente. AirBnB ha sperimentato l'esecuzione di modelli JavaScript sul lato client sul server.

Con JavaScript sul lato server in aumento, credo che la soluzione sia semplicemente quella di avere un unico framework dell'interfaccia utente che gira sia sul client che sul server, generando l'HTML iniziale sul server e fornendo un'esperienza interattiva sul client. Sto lavorando per fornire un tale framework a Meteor, che già unifica altre API tra client e server come recuperare un URL o eseguire una query su una raccolta di dati.

In assenza di tale soluzione, i programmatori di solito finiscono per sostenere che il rendering sul lato client non è molto importante (perché la maggior parte dei siti o delle app sono costituiti da "pagine" o "schermi" di grandi dimensioni ed è accettabile un viaggio di andata e ritorno al server quando si naviga tra di loro) o il rendering sul lato server non è molto importante (perché un'app per tutti i client necessita solo di una schermata di caricamento e di una piccola attenzione in più all'ottimizzazione dei motori di ricerca). Questi argomenti sono motivati ​​dal dolore di dover gestire entrambi i tipi di rendering nella stessa applicazione quando coinvolgono lingue e API diverse.

Modifica: altri esempi dei principali siti e le loro strategie di rendering: Facebook è principalmente PHP ma alcune parti dell'interfaccia utente sono puramente JavaScript: la chat, il modulo di commento, probabilmente la galleria fotografica. Gmail è scritto in qualcosa come C ++ o Java, e non sono sicuro di dove avvenga il rendering, ma immagino che sia principalmente o completamente sul client (data la barra di avanzamento che viene visualizzata durante il caricamento). La vista Gmail precedente o "di base" è presumibilmente visualizzata sul lato server. L'implementazione Markdown di Github è scritta in C e viene eseguita sul server. StackOverflow ha due implementazioni Markdown, una per l'anteprima dal vivo sul client e una per il server.

Modifica (luglio 2016): poiché questa risposta sta ancora ottenendo visualizzazioni e voti, noterò che "avere un singolo framework dell'interfaccia utente che gira sia sul client che sul server" è ora una soluzione più popolare che mai, come Node e React diventare sempre più maturo e diffuso. Node è un server che esegue JavaScript e React è un framework dell'interfaccia utente di Facebook. Molto lavoro e pensiero sono stati dedicati alle funzionalità di rendering sul lato server di React.

Zadack Figg
Il reindirizzamento di Tradeexhange non è un virus, è un adware.Rimuovi tutte le applicazioni indesiderate e gratuite dal tuo dispositivo. Compresi tutti i giochi che mostrano annunci durante il gioco.Assicurati anche in -> Impostazioni -> Applicazioni -> Applicazione in esecuzione.Nessuna applicazione sconosciuta non deve essere eseguita, assicurati che non vi siano altre app sconosciute...

Lascia la tua risposta