就像任何其他类似领域的编程语言一样,Sightly 不会对变量的使用提出任何要求。一个简单的比较是将代码转换为等效的 Java 例程并查看优化和性能效果(理论上)。
为简单起见,让我们将您的 POJO 类设为如下:
class Hero {
public string getBackgroundVideo() {
//Some model logic
}
}
现在,考虑第一个代码片段:
<div data-sly-test.backgroundVideo="${hero.backgroundVideo}" >
Background video URL:
<a href="${backgroundVideo}.html" target="_blank">
${backgroundVideo}
</a>
</div>
这只会执行getBackgroundVideo()
一次并将其存储在变量中以供重用。
或者,对于第二个代码片段:
<div data-sly-test="${hero.backgroundVideo}" >
Background video URL:
<a href="${hero.backgroundVideo}.html" target="_blank">
${hero.backgroundVideo}
</a>
</div>
getBackgroundVideo()
将执行 3 次。
因此,从表面上看,这可能看起来像是 1:3 的执行差异,而且如果函数中涉及复杂的代码逻辑,这看起来真的很昂贵getBackgroundVideo()
。这是真的,您应该通过尝试将复杂函数的输出缓存为变量来避免这种方法。
然而,换个角度看这个问题,这也归结为你的 POJO 类的编写情况。所以,让我们重温你的Hero
课:
class Hero {
private string backgroundVideo;
public void init() {
this.backgroundVide = "some value on business logic";
}
public string getBackgroundVideo() {
return this.backgroundVideo;
}
}
如果您的Hero
POJO 类如上实现,则getBackgroundVideo()
归结为一个简单的 getter,它返回一个字符串值而无需复杂的计算。当然,与本地 HTL 变量相比,函数调用的开销是很小的,而且可能不明显。
总而言之,实际效果只能通过 POJO 实现来衡量,但 HTL 变量方法几乎总是会给您带来缓存的好处。