2012-01-09 101 views
2

我有一个XSLT(在Sitecore下运行),我想要进行基准测试。如何让我的XSLT执行时间达到毫秒级精度?

例如:

<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的各个组件进行基准测试。

有没有办法做到这一点?

回答

7

的Sitecore的“调试页”功能会告诉我需要 跑了多久整个XSLT,但它不会让我的XSLT的基准个别 组件。

有没有办法做到这一点?

这在很大程度上取决于你所使用的XSLT处理器,其结果通常maynot值得信赖

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

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

1

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

相关问题