Optimization 如何分析和优化XSLT?

Optimization 如何分析和优化XSLT?,optimization,xslt,profiling,Optimization,Xslt,Profiling,我有一个在浏览器中查看XML文件的XSLT。XSLT编写得很简单,目前需要很长时间(几分钟)执行 我的XML文件大小适中(~1 MiB),同一文档中执行不同处理的其他XSLT执行得更快。所以我知道问题不在于XML的大小,而在于我的XSLT 如何分析和优化XSLT (在浏览器中执行复杂的XSLT是一个坏主意吗?我应该改为应用XSLT应用程序端吗?商业编辑器具有分析和调试XSLT文件的功能。它也是一个很好的XML编辑器。您使用的是哪个XSLT引擎?如果您使用的是.NET引擎和Visual Studi

我有一个在浏览器中查看XML文件的XSLT。XSLT编写得很简单,目前需要很长时间(几分钟)执行

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

如何分析和优化XSLT


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

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

您使用的是哪个XSLT引擎?如果您使用的是.NET引擎和Visual Studio,那么可以使用集成到Visual Studio中的

其他优秀的分析工具还有Altova和

如果您发布XSLT,就更容易告诉您可能的瓶颈在哪里。通常,使用诸如“//”、前面::*和后面::*之类的XPath表达式时要小心。更多规则和最佳实践:

  • 避免重复使用
    “//项”
  • 不要对同一节点集求值多次;将其保存在变量中
  • 尽量避免使用
    。例如,使用position()
  • 例如,使用
    解决分组问题
  • 避免模板规则中的复杂模式。相反,使用 在规则范围内
  • 使用前面的[-sibling]或
    跟随[-同级]
    轴。这经常 表示具有n平方的算法 表演
  • 不要对同一节点集进行多次排序。如果需要,保存它 因此,树片段和访问 它使用
    节点集()
    扩展名 功能
  • 要输出简单的
    #PCDATA
    元素的文本值,请使用
    优先于
  • (来自)

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


    关于您在浏览器中使用XSLT的问题:我不建议您使用XSLT,因为首先,您不是独立于平台的(不是每个浏览器都支持XSLT,或者某些浏览器可能只支持性能较差的引擎),其次,您无法控制所用的引擎。

    我喜欢在基于Windows的机器上使用XSLT。它还内置了一个分析器。你可以。(扫描到5:45以了解有关探查器的更多信息)。这是一种商业产品。。。有一个时间试用期:)

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

    这里有一些来自

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

  • 保持源文档的小型化。如有必要,先拆分文档
  • 在运行之间将XSLT处理器(和Java VM)加载到内存中
  • 如果重复使用同一样式表,请先编译它
  • 如果重复使用同一源文档,请将其保留在内存中
  • 如果重复执行相同的转换,请不要。而是存储结果
  • 保持输出文档小。例如,如果您正在生成HTML,请使用CSS
  • 切勿多次验证同一源文档
  • 将复杂的转换拆分为几个阶段
  • 关于如何编写高效X的八个技巧SLT:

  • 避免重复使用“
    //item
  • 不要对同一节点集求值多次;将其保存在变量中
  • 尽量避免使用
    。例如,通过使用
    position()
  • 例如,使用
    解决分组问题
  • 避免模板规则中的复杂模式。相反,在规则中使用
  • 使用前面的[-sibling]或后面的[-sibling] 斧头。这经常 表示具有
    n
    平方性能的算法
  • 不要对同一节点集进行多次排序。如有必要,将其另存为 结果树片段 并使用
    node-set()
    扩展功能访问它
  • 要输出简单PCDATA元素的文本值,请使用
    优先 到

  • 我在浏览器中运行,所以我的XSLT引擎是Firefox、IE和Safari使用的任何东西。我知道每个引擎在使用相同的XSLT时会有不同的行为,因此分析一个特定的引擎可能无法反映所有3个方面。发布有问题的XSLT,我可能会帮助您找到有问题的行。正如divo所说:“发布有问题的XSLT,我可能会帮助您找到有问题的行”:)我使用了xsl:key,这带来了巨大的不同。现在小样本的速度提高了10倍,而大样本的速度差异更大。在我尝试其他一些优化之前,我将实现我的其他功能。微软有一个独立的分析器。它被称为“XsltMajic分析器工具”。在这个知识库中有一个链接:如果您提供了XSLT代码和观察问题的XML文档,我和其他人可以尝试提供帮助。注意:XSLT分析和(更好的)调试已添加到Visual Studio 2010中。当然,这仍然是XSLT1.0。