我有一个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的各个组件进行基准测试。
有没有办法做到这一点?
答案 0 :(得分:7)
Sitecore“调试页面”功能将告诉我需要多长时间 运行整个XSLT,但它不会让我个人的基准 XSLT的组件。
有没有办法做到这一点?
这很大程度上取决于您使用的XSLT处理器,结果通常可能不值得信赖。
即使您编写自己的扩展函数并从XSLT代码调用它们(这似乎是实现所需时序精度的唯一方法),也不能保证在预期时调用扩展函数。或者,当预期一次通话时,不会多次调用它。这是因为我们无法预测和预测特定XSLT处理器使用的优化器的决定。
某些XSLT处理器实现延迟评估 - 除非生成结果绝对必要,否则不会计算表达式。这样的处理器只有在使用其结果时才执行对定时扩展功能的调用 - 并且可能在测量处理结束时 - 所以在这种情况下,任何测量的处理都是“瞬时的”。
答案 1 :(得分:1)
如果您正在尝试识别处理瓶颈,可以将单独的组件逐个移动到新的XSLT中,使用调试工具在每个步骤中采用毫秒级基准测试。