如何分析和优化XSLT?

pau*_*doo 30 xslt optimization profiling

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

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

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

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

Dir*_*mar 31

您使用的是哪个XSLT引擎?如果您使用的是.NET引擎和Visual Studio,则可以使用集成到Visual Studio中的XSLT分析器,这是非常有用的.

其他出色的性能分析工具是Altova的XML SpyOxygen.

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

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

(从http://www.dpawson.co.uk/xsl/sect4/N9883.html#d15756e150)

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

关于你关于XSLT的问题在浏览器中:我不会推荐它,因为第一你是不是独立于平台(不是每一个浏览器可能支持或某些浏览器可能只用一个业绩不佳的引擎支持它)和第二,你无法控制发动机使用.

  • 微软有一个独立的分析器.它被称为"XsltMajic Profiler工具".这个KB中有一个链接:http://support.microsoft.com/kb/331026/ (2认同)

Dim*_*hev 22

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

下面是一些XSLT的使用率和性能的技巧迈克尔·凯:

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

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

如何编写高效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>.