我有一个XSLT用于在浏览器中查看XML文件。 XSLT是天真的编写,目前需要很长时间才能执行(几分钟)。
我的XML文件大小适中(~1 MiB),而执行不同处理的同一文档的其他XSLT执行速度要快得多。所以我知道问题不在于XML的大小,而是我的XSLT。
如何进行性能分析和优化我的XSLT?
(在浏览器中执行复杂的XSLT是一个坏主意吗?我应该改为应用XSLT应用程序吗?)
答案 0 :(得分:30)
其他优秀的分析工具是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>
{{1}}。(来自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的八个技巧:
有关如何编写高效X SLT的八个提示:
//item
”。<xsl:number>
。例如,使用position()
。<xsl:key>
来解决分组问题。<xsl:choose>
。preceding[-sibling]
或following[-sibling]
时要小心
轴。经常这样
表示具有n
- 平方性能的算法。node-set()
扩展功能访问它。<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以了解有关分析器的更多信息)。它是一种商业产品......具有计时期限:))