2012-07-05 5 views
13

Sfondo sintassi giadaQuali misure possono essere prese per migliorare le prestazioni di rendering modello di giada in veloce utilizzando nodejs

è impressionante, ma ho voluto vedere come è stato influire sulle prestazioni.

Così ho creato un'applicazione per pagina singola e ho usato il banco apache per confrontare il suo throughput usando jade per rendere una pagina vs usando una stringa in memoria. Non c'erano variabili quindi questo era un confronto puramente accademico.

La stringa in memoria ha reso l'intera app più veloce rispetto a due volte più veloce, il che sembra molto importante considerando che la modalità di produzione della giada dovrebbe essere il rendering da una cache in memoria.

Sto utilizzando il nodo 0.8 e la versione 2.5.11 di Express in modalità di produzione con l'opzione della cache di visualizzazione impostata su true.

Apache risultati panca: https://dl.dropbox.com/u/3737990/jade/jade.png https://dl.dropbox.com/u/3737990/jade/memory.png

risposta

5

An in-memory stringa è la cosa più veloce in assoluto si può fare, quindi confrontando contro di essa non è molto significativo. Un modello non sarà mai veloce quanto lo string concat. L'impostazione della modalità di produzione è la cosa più importante che puoi fare in termini di prestazioni.

+4

Mi stavo chiedendo perché non stava andando rapidamente come mi piaceva, e poi mi sono reso conto che non avevo archiviato il mio NODE_ENV in .bash_profile. È pazzesco l'aumento delle prestazioni derivante dall'impostazione di "esportazione NODE_ENV = produzione", sui modelli Jade e su molti altri Expressy tings. –

9

Come menzionato da Harry, non ha senso confrontare le prestazioni di un motore di modello con le prestazioni di invio di una stringa, poiché queste soddisfano due esigenze diverse. È un po 'come paragonare il MPG di due auto, tranne una macchina che hai appena messo in folle e lasciarla rotolare giù da una collina.

Invece, è molto più utile per compare templating engines, poiché sono tutti mezzi per gli stessi fini (HTML reso dinamicamente).

Qui vediamo che Jade è il linguaggio di template più lento. Ci sono probabilmente un sacco di fattori che giocano nel motivo per cui questo è il caso, ma il problema principale è che Jade wasn't designed for speed. Se hai bisogno di prestazioni estremamente elevate, doT è stato progettato per la velocità.

+6

La giada in quella demo non è stata impostata su 'modalità di produzione'. Il confronto è senza valore. – Harry

+0

Non ne sono del tutto sicuro perché non ho i parametri di riferimento su di me in questo momento, ma Jade è il secondo o il terzo più veloce in quella lista.Ovviamente niente batte perché è essenzialmente solo una stringa concat. – Harry

+0

la modalità di produzione non si applica solo a jade in express? la demo sta usando l'implementazione della giada grezza – alzclarke

4

(L'aggiunta di questo extra po 'di informazioni dal momento che questo sembra essere uno dei primi successi dei motori di ricerca quando alla ricerca di "esprimere le prestazioni di giada")

Ho avuto lo stesso problema con un'applicazione di produzione nodejs. Il problema è che jade viene eseguito di default sulla modalità di sviluppo che non è ciò che si desidera per la produzione, poiché questo ricompilerà tutti i modelli più e più volte, sprecando CPU e memoria.

La soluzione è eseguire la tua app con: NODE_ENV=production node app.js, questo impedirà il ciclo di ricompilazione della giada e forse innescherà altri miglioramenti express perf.

Si noti che questo non rende la giada più veloce, ma impedisce solo di fare lavori inutili e di uccidere la CPU.

+0

Questo effettivamente fa una differenza significativa. Funziona più velocemente in modalità prodcution. – Marc

+0

esiste un modo per impostare la modalità "produzione" ma nel mio ambiente di staging è NODE_ENV = test. C'è ancora un modo per scavalcare le impostazioni di produzione? –

Problemi correlati