我有大约10个动态生成的HTML标准块,它们包含在我网站的大部分页面上(信息侧边栏)。
我可以使用#include语句或将它们定义为宏,两者都可以。
什么更好?我是Velocity的新手并从JSP迁移一个站点。
为什么要使用一个与另一个?当no-arg宏()做同样的事情时为什么要#include?从缓存/内存角度来看,它们的处理方式有何不同?
答案 0 :(得分:6)
如果它们是静态块(其中没有VTL代码),那么#include它们作为单独的资源肯定会表现得更好。即使它们是动态的(具有VTL代码),也可以使用#parse而不是#include,并且仍然可以获得比宏更好的性能。我甚至不会惊讶地发现#define VTL块比宏更快,尽管我还没有测试过。宏是伟大的,非常有用,但人们有时会滥用或滥用它们。
#parse和#include的缺点是你必须维护更多单独的文件,但这是超高速度的代价。 #define非常适合不需要args和/或需要作为引用传递的代码块,但是你应该只在定义它们的模板中直接使用#define'd块,否则事情就会变得混乱。
宏是伟大的,因为它们采用参数并且可以在全球范围内定义,并且全局是它们表现最佳且最有意义的地方。当我有一个合理的选择时,我通常会尽量避免使用本地宏。当我成功避免使用任何本地宏时,我会转而支持它们以获得较小的速度提升。