我有一個XSLT用於查看瀏覽器中的XML文件。 XSLT是天真寫的,並且需要很長時間來執行(幾分鐘)。如何分析和優化XSLT?
我的XML文件大小適中(〜1 MiB),其他XSLT對於執行不同處理的同一文檔可以更快地執行。所以我知道這不是問題的XML大小,而是我的XSLT。
我該如何去分析和優化我的XSLT?
(這是個壞主意,在瀏覽器中做複雜的XSLT文件?我應該代替應用XSLT應用端?)
我有一個XSLT用於查看瀏覽器中的XML文件。 XSLT是天真寫的,並且需要很長時間來執行(幾分鐘)。如何分析和優化XSLT?
我的XML文件大小適中(〜1 MiB),其他XSLT對於執行不同處理的同一文檔可以更快地執行。所以我知道這不是問題的XML大小,而是我的XSLT。
我該如何去分析和優化我的XSLT?
(這是個壞主意,在瀏覽器中做複雜的XSLT文件?我應該代替應用XSLT應用端?)
您使用哪種XSLT引擎?如果您使用.NET引擎和Visual Studio,則可以使用集成到Visual Studio中的XSLT profiler這非常有用。
其他優秀的剖析工具是Altova的XML Spy和Oxygen。
如果您發佈您的XSLT,可能會更容易告訴您哪裏可能存在瓶頸。一般來說,要小心XPath表達式,例如'//',在::之前和在::之後。一些更多的規則和最佳實踐:
- 避免重複使用的
"//item"
。- 不要多次評估相同的節點集;將它保存在一個變量中。
- 如果可以,請避免
<xsl:number>
。例如,通過使用position()。例如- 使用
<xsl:key>
來解決分組問題。- 避免模板規則中的複雜模式。相反,在規則中使用 。
- 使用
preceding[-sibling]
或following[-sibling]
軸時要小心。這通常是 表示具有n平方 性能的算法。- 不要對多個節點集進行多次排序。如有必要,將 保存爲結果樹片段,並使用
node-set()
擴展名 函數訪問 。- 要輸出簡單的
#PCDATA
元素的文本值,請使用<xsl:value-of>
而不是<xsl:apply-templates>
。
遵循這些規則通常會導致非常有效的XSLT,你可能不需要在所有使用一個分析器。
關於你的問題有關在瀏覽器XSLT:我不會推薦它,因爲第一你是不是獨立於平臺(不是每一個瀏覽器可能支持或某些瀏覽器可能只用一個業績不佳的引擎支持它)和第二,你可以不能控制使用的發動機。
我在瀏覽器中運行,所以我的XSLT引擎是Firefox,IE和Safari使用的。 我知道每個引擎的行爲都與XSLT不同,因此對一個特定引擎進行概要分析可能並不能反映出全部3. – pauldoo 2009-01-12 10:09:54
商業Oxygen XML編輯器爲分析和調試XSLT文件的功能。這也是一個很好的XML編輯器。
我喜歡爲基於Windows的機器使用Altova's XMLSpy。它還內置了一個分析器。您可以check out a video on using the editor。 (掃描至5:45以瞭解關於探查器的更多信息)。這是一個商業產品... :)與
如果您提供的XSLT代碼,並在其上觀察問題的XML文檔時間的試用期,我和其他人可能試圖幫助。
這裏有一些XSLT usage and performance tips從Michael Kay:
對於如何有效使用XSLT八個小竅門:
八個小竅門如何寫出高效的X SLT:
//item
」。<xsl:number>
。例如,通過使用position()
。例如<xsl:key>
來解決分組問題。<xsl:choose>
。preceding[-sibling]
或following[-sibling]
軸時要小心。這通常是 表示具有性能的算法。node-set()
擴展函數對其進行訪問。<xsl:value-of>
優先 至<xsl:apply-templates>
。
如果您提供了觀察問題的XSLT代碼和XML文檔,我和其他人可以嘗試提供幫助。 – 2009-01-12 14:14:34
注意:XSLT分析和(更好)調試已添加到Visual Studio 2010中。當然,這仍然是XSLT 1.0。 – Abel 2010-04-13 10:36:28