2010-02-25 19 views
9

Utilizziamo Apache Velocity per i modelli di siti Web e alcuni di essi si stanno complicando. Hai notato problemi di prestazioni con determinate funzionalità di Velocity? E come li hai aggirati?Problemi di prestazioni di Apache Velocity?

+4

Se si hanno dubbi, quindi profilo. Con un profiler. Non c'è bisogno di indovinare. – skaffman

risposta

6

La funzione più importante che le persone trascurano spesso è il caching del caricatore di risorse (disattivato per impostazione predefinita) che aumenta un po 'le prestazioni (file.resource.loader.cache).

La direttiva #parse ha anche un impatto notevole sulle prestazioni, provare a utilizzarla solo per evitare la duplicazione del codice, non solo per dividere i modelli in parti logiche.

Se i modelli diventano abbastanza complessi in termini di logica, forse sarebbe possibile spostare quella logica in un controller e fornire un modello con struttura di dati pronta per il rendering.

Non ho notato alcun calo di prestazioni da Velocity, quando stavo testando la velocità Velocity prima di passare da JSP erano costantemente il 50% più veloci su qualsiasi modello che ho lanciato. Attualmente generiamo siti con migliaia di pagine renderizzate da modelli Velocity ed è velocissimo, molto soddisfatto delle prestazioni.

+0

Lo spostamento delle chiamate verso il codice Java che produce lo stesso valore ogni volta al di fuori dei cicli può migliorare anche le prestazioni. Questo sembrava aiutare nella mia situazione. Il compilatore Hotspot di Java lo fa per codice Java - non sono sicuro che questa funzionalità esista nel motore Velocity. –

10

Prima di tutto utilizzare l'ultima libreria Velocity (1.7 o 1.6.4). La versione 1.5 contiene alcuni problemi di prestazioni gravi!

qui è anche la lista dei parametri che è necessario smanettare sul produzione ambiente:

  1. velocimacro.library.autoreload - deve essere impostato su falso
  2. file.resource. loader.cache - deve essere impostato su true
  3. fi le.resource.loader.modificationCheckInterval - dovrebbe essere impostato a -1
  4. parser.pool.size dovrebbe essere aumentato se il valore di default non è abbastanza grande (il valore predefinito è 20)
2

Noi prova a memorizzare nella cache il numero byte[] nel nodo ASTText per evitare di codificare troppo il testo di output.

+0

+1 Sei di Taobao.com? –

+0

Puoi esporre più dettagli come l'hai fatto? –

+0

Penso di aver saputo come l'hai fatto. Grazie ~! Ma perché dici che codificherà il testo di output troppe volte. Non lo capisco –