2010-10-29 7 views
5

Tengo alrededor de 10 bloques estándar de HTML generado dinámicamente que se incluyen en un gran porcentaje de páginas en mi sitio (barras laterales informativas).Velocidad: ¿Es mejor utilizar una declaración de Macro de velocidad o #include (...) para un bloque DIV repetido muchas veces en páginas diferentes?

Puedo usar sentencias #include o definirlas como macros, ambas funcionarían.

¿Qué hay mejor? Soy nuevo en Velocity y estoy migrando un sitio de JSP.

¿Por qué utilizar uno frente al otro? ¿Por qué #include cuando una macro no-arg() hace lo mismo? ¿Se manejan de forma diferente desde una perspectiva de almacenamiento en caché/memoria?

Respuesta

6

Si son bloques estáticos (sin código VTL en ellos), # incluirlos como recursos independientes sin duda funcionará mucho mejor. Incluso si son dinámicos (tienen código VTL), entonces puede usar #parse en lugar de #include y obtener un mejor rendimiento que una macro. Ni siquiera me sorprendería saber que los bloques #define VTL son más rápidos que las macros, aunque no lo he probado. Las macros son geniales y muy útiles, pero a veces las personas hacen mal uso o abusan de ellas.

La desventaja de #parse y #include es que debe mantener más archivos separados, pero ese es el precio de la velocidad superior. #define es ideal para bloques de código que no necesitan argumentos y/o necesitan pasarse como referencia, pero solo debe usar bloques # defined'd directamente en la plantilla que los define o las cosas pueden ser confusas.

Las macros son geniales en cuanto a que toman params y se pueden definir globalmente, y globalmente es donde rinden mejor y tienen más sentido. Generalmente trato de evitar las macros locales cuando tengo una alternativa razonable. Y cuando evito con éxito tener macros locales, les quito compatibilidad para obtener un pequeño impulso de velocidad.

+0

Muchas gracias por la excelente explicación, realmente ayuda a aclarar la diferencia en mi mente. –

Cuestiones relacionadas