XSLT函数调用的效率

XSLT函数调用的效率,xslt,Xslt,存储函数调用的结果是否比多次调用函数更有效 范例- <xsl:variable name="time" select="current-dateTime()"/> <myTime><xsl:value-of select="$time"/></myTime> <yourTime><xsl:value-of select="$time"/></yourTime> 像往常一样,这些事情在很大程度上取决于实际实

存储函数调用的结果是否比多次调用函数更有效

范例-

<xsl:variable name="time" select="current-dateTime()"/>
<myTime><xsl:value-of select="$time"/></myTime>
<yourTime><xsl:value-of select="$time"/></yourTime>


像往常一样,这些事情在很大程度上取决于实际实现。我要注意的一件事是函数调用是否会在两次调用之间更改其值-这可能很重要


在这里的例子中,函数是稳定的(请参阅),因此实现可能有一个缓存值,因此调用函数基本上只是一个非常便宜的“getter”实现(很可能与读取变量的成本相同)。

嗯,(a)这显然取决于函数,以及(b)这显然取决于XSLT处理器。要回答这类性能问题,唯一的方法就是对其进行测量。甚至度量也可能没有帮助,因为要进行度量,通常需要进行人工操作,例如调用函数10000次,而当您这样做时,优化器可能会对您的代码进行不同的处理,而不是只调用一次。

我举了一个不好的例子,因为时间可能会发生变化。但是对于current-group(),组应该是相同的吗?我的答案同样有效-这取决于实现。如果编译XSLT,它可能会“看到”这两个调用,如果它能确定它们将返回相同的结果,它可能会像使用变量一样对其本身进行优化。将示例放入
并计时,第一个平均耗时5207毫秒,第二个平均耗时5047毫秒。因此,大致相等。如果你确实需要微优化,氧气有一个非常好的分析器,可以显示花费的时间和你的“热点”在哪里。谢谢Mads。第一次似乎花了更长的时间。这可能是因为变量初始化一直在循环中吗?一段字符串有多长?
<myTime><xsl:value-of select="current-dateTime()"/></myTime>
<yourTime><xsl:value-of select="current-dateTime()"/></yourTime>