如何分析和优化XSLT?

时间:2009-01-12 09:59:03

标签: optimization xslt profiling

我有一个XSLT用于在浏览器中查看XML文件。 XSLT是天真的编写,目前需要很长时间才能执行(几分钟)。

我的XML文件大小适中(~1 MiB),而执行不同处理的同一文档的其他XSLT执行速度要快得多。所以我知道问题不在于XML的大小,而是我的XSLT。

如何进行性能分析和优化我的XSLT?

(在浏览器中执行复杂的XSLT是一个坏主意吗?我应该改为应用XSLT应用程序吗?)

4 个答案:

答案 0 :(得分:30)

你正在使用哪个XSLT引擎?如果您使用的是.NET引擎和Visual Studio,则可以使用集成到Visual Studio中的XSLT profiler,这是非常有用的。

其他优秀的分析工具是Altova的XML SpyOxygen

如果您要发布XSLT,那么告诉您哪里可能存在瓶颈会更容易。一般要小心使用XPath表达式,例如'//',前面的:: *和下面的:: *。更多规则和最佳实践:

  
      
  1. 避免重复使用"//item"
  2.   
  3. 不要多次评估同一个节点集;将其保存在变量中。
  4.   
  5. 如果可以,请避免使用<xsl:number>。例如,通过使用position()。
  6.   
  7. 例如,使用<xsl:key>来解决分组问题。
  8.   
  9. 避免模板规则中的复杂模式。相反,使用    在规则内。
  10.   
  11. 使用preceding[-sibling]或时要小心   following[-sibling]轴。经常这样   表示具有n平方的算法   性能
  12.   
  13. 不要多次对同一节点集进行排序。如有必要,请保存   结果树片段和访问   它使用node-set()扩展名   功能
  14.   
  15. 要输出简单#PCDATA元素的文本值,请使用   <xsl:value-of>优先于<xsl:apply-templates>   {{1}}。
  16.         

    (来自http://www.dpawson.co.uk/xsl/sect4/N9883.html#d15756e150

遵循这些规则通常会产生非常高效的XSLT,您可能根本不需要使用分析器。

关于你在浏览器中关于XSLT的问题:我不推荐它,因为首先你不是平台独立的(不是每个浏览器都支持它,或者某些浏览器可能只支持性能不佳的引擎),其次你可以' t控制使用的发动机。

答案 1 :(得分:21)

如果您提供XSLT代码和您观察到问题的XML文档,我和其他人可以尝试提供帮助

以下是来自XSLT usage and performance tips 的一些Michael Kay

有关如何有效使用XSLT的八个技巧

  1. 保持源文档较小。如有必要,首先拆分文件。
  2. 在运行之间保持XSLT处理器(和Java VM)加载到内存中
  3. 如果您重复使用相同的样式表,请先编译它。
  4. 如果您反复使用相同的源文档,请将其保留在内存中。
  5. 如果您反复执行相同的转换,请不要。改为存储结果。
  6. 保持输出文档较小。例如,如果您要生成HTML,请使用CSS。
  7. 不要多次验证同一源文档。
  8. 将复杂的转换分为几个阶段。
  9. 有关如何编写高效X SLT的八个提示:

    1. 避免重复使用“//item”。
    2. 不要多次评估同一个节点集;将其保存在变量中。
    3. 如果可以,请避免使用<xsl:number>。例如,使用position()
    4. 例如,使用<xsl:key>来解决分组问题。
    5. 避免模板规则中的复杂模式。相反,请在规则中使用<xsl:choose>
    6. 使用preceding[-sibling]following[-sibling]时要小心 轴。经常这样 表示具有n - 平方性能的算法。
    7. 不要多次对同一节点集进行排序。如有必要,请将其另存为 结果树片段 并使用node-set()扩展功能访问它。
    8. 要输出简单#PCDATA元素的文本值,请使用<xsl:value-of> 优先考虑 到<xsl:apply-templates>

答案 2 :(得分:2)

商业Oxygen XML编辑器具有分析和调试XSLT文件的功能。它也是一个很好的XML编辑器。

答案 3 :(得分:1)

我喜欢将Altova's XMLSpy用于基于Windows的计算机。它还内置了一个分析器。你可以check out a video on using the editor。 (扫描到5:45以了解有关分析器的更多信息)。它是一种商业产品......具有计时期限:))