速度:对于在不同页面上重复多次的DIV块,使用Velocity宏或#include(...)语句会更好吗?

Dav*_*rks 5 java macros velocity include

我有大约10个动态生成的HTML标准块,它们包含在我网站上的大部分页面上(信息侧边栏).

我可以使用#include语句或将它们定义为宏,两者都可以.

什么更好?我是Velocity的新手并从JSP迁移一个站点.

为什么使用一个与另一个?当no-arg宏()做同样的事情时为什么要#include?它们与缓存/内存的处理方式有何不同?

Nat*_*bna 7

如果它们是静态块(其中没有VTL代码),则#included将它们作为单独的资源肯定会表现得更好.即使它们是动态的(具有VTL代码),也可以使用#parse而不是#include,并且仍然可以获得比宏更好的性能.我甚至不会惊讶地发现#define VTL块比宏更快,尽管我还没有测试过.宏是伟大的,非常有用,但人们有时会滥用或滥用它们.

#parse和#include的缺点是你必须维护更多单独的文件,但这是超高速度的代价.#define非常适合不需要args和/或需要作为引用传递的代码块,但是你应该只在定义它们的模板中直接使用#define'd块,否则事情就会变得混乱.

宏是伟大的,因为它们采用参数并且可以在全球范围内定义,并且全局是它们表现最佳并且最有意义的地方.当我有一个合理的选择时,我通常会尽量避免使用本地宏.当我成功避免使用任何本地宏时,我会关闭它们以获得一个小的速度提升.