2012-10-28 6 views
12

Sto lavorando su un sito Web di grandi dimensioni e stiamo trasferendo molte funzionalità sul lato client (stack Require.js, Backbone e Handlebars). Ci sono anche discussioni su possibilmente spostando tutto il rendering sul lato client.Perché esattamente il rendering HTML lato server è più veloce del lato client?

Ma leggendo alcuni articoli, specialmente quelli su Twitter che si allontanano dal rendering lato client, che menzionano che il lato server è più veloce/più affidabile, comincio ad avere domande. Non capisco come il rendering di widget HTML abbastanza semplici in JS da JSON e modelli sia un browser contemporaneo su una CPU dual core con 4-8 GB di RAM è più lento di fare dozzine di inclusioni nell'app lato server. Ci sono delle vere cifre di benchmarking reali su questo?

Inoltre, sembra che l'analisi di modelli HTML da parte dei motori di templating lato server non possa essere più veloce del rendering del codice HTML stesso da un modello Handlebars, soprattutto se si tratta di una funzione JS precomp?

+0

Direi che le operazioni DOM sono più lente della manipolazione delle stringhe. Potresti collegare ad alcuni di questi articoli? – Blender

+0

questo in particolare http://code-inside.de/blog-in/2012/07/06/client-side-vs-server-side-html-rendering/ –

risposta

8

Ci sono molte ragioni:

  1. JavaScript viene interpretato la lingua ed è più lento di quello lato server (di solito fatto in linguaggio compilato)
  2. manipolazione del DOM è lento, e se si stanno manipolando in JS esso si traduce in scarse prestazioni. Ci sono modi per superare questo come preparando il rendering in testo e poi valutandolo, questo potrebbe in effetti avvicinarti al rendering lato server.
  3. Alcuni browser sono semplicemente troppo lento, soprattutto vecchio IE
+0

Non mi preoccuperei molto dei vecchi browser IE. Non supportiamo IE's sotto IE8. E non mi preoccuperei per la minoranza di utenti con macchine e connessioni lente. Sono curioso di sapere quanto più lenta è la performance sulla stessa macchina, stesso browser, solo una carica HTML e un'altra carica JSON e rendering nel client. Suppongo di dover solo fare un test. –

+1

A seconda della quantità di manipolazione del DOM che stai facendo e della quantità di JavaScript che stai facendo. Ad esempio, se si inserisce un migliaio di elementi DOM, lo script potrebbe impiegare molti secondi per il rendering, mentre gli stessi mille elementi DOM valutati una volta (rendering o testo del server) richiederebbero millisecondi. Questi numeri indicano la differenza, ma il numero effettivo dipende dalla pagina, dalla potenza della macchina e dal browser. – albattran

3
  • prestazioni del linguaggio compilato contro javascript interpretato
  • Caching, vale a dire - che serve l'esatto stessa pagina un altro utente ha già richiesto, questo rimuove il bisogno per ogni cliente di renderlo. Ottimo per siti con traffico enorme, ovvero siti di notizie. La micro-cache può anche fornire quasi aggiornamenti in tempo reale, ma offre un traffico significativo dalla cache. Non c'è bisogno di aspettare per il client di rendering
  • Meno dipendenza da utenti con vecchi computer o/browser lenti storpi
  • solo bisogno di preoccuparsi per il rendering, meno affidamento su come i diversi browser gestire DOM (affidabilità)

Ma per un'interfaccia utente complessa, la resa lato client delle interazioni fornirà un'esperienza utente più snella.

Dipende molto dalle prestazioni che stai cercando di ottimizzare e dal numero di utenti.

+0

Il sito è abbastanza grande (non è sicuro il conteggio degli utenti, ma è ospitato su più di 60 server). La maggior parte dei contenuti è personalizzata. È una grande app per la collaborazione e la gestione dei progetti. –

+0

Data la collaborazione e la gestione dei progetti, farei comunque il rendering degli script sul client. L'interattività richiede una risposta rapida, quindi avrai comunque bisogno di js. –

0

Per eseguire il codice sul lato client, è necessario prima caricarlo. Il codice lato server viene appena caricato all'avvio del server, mentre il codice client deve essere caricato ogni volta che la pagina viene caricata. In ogni caso il codice deve essere interpretato quando si carica la pagina, anche se il file è già in cache. Si potrebbe anche avere il caching degli alberi di analisi JS nel browser, ma penso che quelli non siano persistenti, quindi non vivranno a lungo.

Ciò significa che non importa quanto sia veloce il JavaScript (ed è piuttosto veloce) che il lavoro deve essere eseguito mentre l'utente è in attesa. Molti studi hanno dimostrato che il tempo di caricamento delle pagine influisce notevolmente sulla percezione da parte degli utenti della qualità e della pertinenza dei siti.

La linea di fondo è che hai al massimo 500ms per ottenere il rendering della pagina da una cache pulita nel tipico ambiente di sviluppo.I dispositivi e le reti più lenti renderanno questo ritardo appena accettabile dalla maggior parte degli utenti.

Quindi probabilmente hai 50-100 ms per fare cose in JavaScript durante il caricamento della pagina, tutto questo, in totale, il che significa che il rendering di una pagina complessa, beh, non è facile.