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

Geo*_*rge 2 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
Run Code Online (Sandbox Code Playgroud)

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

如果我包括xmlns:date="http://exslt.org/dates-and-times"我得到date:dateTime(),但这只是秒精度.

同样,sc:formatdate(sc:isoNow(),'ss.ffff')也只有秒精度.

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

有没有办法做到这一点?

Dim*_*hev 7

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

有没有办法做到这一点?

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

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

一些XSLT处理器实现了惰性求值 - 除非生成结果绝对必要,否则不会计算表达式.这样的处理器仅在使用其结果时才执行对定时扩展功能的调用 - 并且可能在测量的处理结束时 - 因此在这种情况下,任何测量的处理都将是"瞬时的".