2012-01-09 84 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中,並使用調試工具在每個步驟中執行毫秒基準測試。

相關問題