2010-02-25 8 views
9

Estamos utilizando Apache Velocity para plantillas de sitios web y algunas de ellas se están volviendo complejas. ¿Has notado algún problema de rendimiento con ciertas características de Velocity? ¿Y cómo te las arreglaste con ellos?¿Errores de rendimiento de velocidad de Apache?

+4

Si tiene dudas, perfile. Con un perfilador. No es necesario adivinar. – skaffman

Respuesta

6

La característica más importante que las personas a menudo pasan por alto es el almacenamiento en memoria caché del cargador de recursos (desactivado por defecto) que aumenta bastante el rendimiento (file.resource.loader.cache).

#parse directiva también tiene un impacto notable en el rendimiento, intente usarlo solo para evitar la duplicación de código, no solo para dividir las plantillas en partes lógicas.

Si sus plantillas se vuelven bastante complejas en términos de lógica, tal vez sería posible cambiar esa lógica a un controlador y proporcionar una plantilla con estructura de datos lista para representar.

No noté ningún cambio en el rendimiento de Velocity, cuando estaba probando la velocidad de velocidad antes de cambiar de JSP, eran constantemente un 50% más rápidos en cualquier plantilla que les arrojara. Actualmente generamos sitios con miles de páginas renderizadas a partir de plantillas de Velocity y es muy rápido, muy satisfecho con el rendimiento.

+0

El desplazamiento de llamadas al código Java que produce el mismo valor cada vez fuera de los bucles también puede mejorar el rendimiento. Esto pareció ayudar en mi situación. El compilador Hotspot de Java hace esto para el código Java: no estoy seguro de si esta característica existe en el motor Velocity. –

10

Antes que nada utilice la última biblioteca de velocidad (1.7 o 1.6.4). ¡La versión 1.5 contiene algunos problemas graves de rendimiento!

También aquí es la lista de parámetros que debe pellizcar en la producción medio ambiente:

  1. velocimacro.library.autoreload - se debe establecer en falsa
  2. file.resource. loader.cache - debe establecerse en true
  3. fi le.resource.loader.modificationCheckInterval - debe establecerse en -1
  4. parser.pool.size se debe aumentar si el valor por defecto no es lo suficientemente grande (valor por defecto es 20)
2

Nosotros intente guardar en caché el byte[] en el nodo ASTText para evitar la codificación del texto de salida demasiadas veces.

+0

+1 ¿Eres de Taobao.com? –

+0

¿Puede exlain más detalles de cómo lo hizo? –

+0

Creo que he sabido cómo lo hiciste. Gracias ~! Pero por qué dices que codificará el texto de salida demasiadas veces. No lo entiendo –

Cuestiones relacionadas