如何将XSLT执行时间精确到毫秒级?

时间:2012-01-09 03:45:06

标签: xslt sitecore xslt-1.0

我有一个XSLT(在Sitecore下运行)我想要进行基准测试。

例如:

<xsl:variable name="start_ms" select="TIME IN MILLIS" />

Do something

<xsl:variable name="end_ms" select="TIME IN MILLIS" />
<xsl:variable name="total_ms" select="$end_ms - $start_ms" />

Do something else

不幸的是,我无法将时间精确到毫秒。

如果我添加xmlns:date="http://exslt.org/dates-and-times",我会获得date:dateTime(),但这只会达到秒精度。

同样,sc:formatdate(sc:isoNow(),'ss.ffff')也只能达到秒精度。

Sitecore“调试页面”功能将告诉我运行整个XSLT需要多长时间,但它不会让我对XSLT的各个组件进行基准测试。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:7)

  

Sitecore“调试页面”功能将告诉我需要多长时间   运行整个XSLT,但它不会让我个人的基准   XSLT的组件。

     

有没有办法做到这一点?

这很大程度上取决于您使用的XSLT处理器,结果通常可能不值得信赖

即使您编写自己的扩展函数并从XSLT代码调用它们(这似乎是实现所需时序精度的唯一方法),也不能保证在预期时调用扩展函数。或者,当预期一次通话时,不会多次调用它。这是因为我们无法预测和预测特定XSLT处理器使用的优化器的决定。

某些XSLT处理器实现延迟评估 - 除非生成结果绝对必要,否则不会计算表达式。这样的处理器只有在使用其结果时才执行对定时扩展功能的调用 - 并且可能在测量处理结束时 - 所以在这种情况下,任何测量的处理都是“瞬时的”。

答案 1 :(得分:1)

如果您正在尝试识别处理瓶颈,可以将单独的组件逐个移动到新的XSLT中,使用调试工具在每个步骤中采用毫秒级基准测试。