这个问题之前在 stackoverflow 中被问过,您可以在此处查看原始问题:How do I profile and optimize an XSLT?
以下是已接受答案的片段:
您使用的是哪个 XSLT 引擎?如果您使用的是 .NET 引擎和 Visual Studio,您可以使用集成到 Visual Studio 中的 XSLT 分析器,这非常有用。
其他优秀的分析工具是 Altova 的 XML Spy 和 Oxygen。
如果您发布您的 XSLT,则更容易告诉您可能的瓶颈在哪里。通常要小心 XPath 表达式,例如 '//'、previous::* 和 following::*。更多规则和最佳实践:
- 避免重复使用
"//item"
.
- 不要多次评估同一个节点集;将其保存在变量中。
<xsl:number>
如果可以,请避免。例如,通过使用 position()。
- 例如,使用
<xsl:key>
来解决分组问题。
- 避免模板规则中的复杂模式。相反,在规则内使用。
preceding[-sibling]
使用或
following[-sibling]
轴时要小心。这通常表示具有 n 平方性能的算法。
- 不要对同一个节点集进行多次排序。如有必要,将其保存为结果树片段并使用
node-set()
扩展功能访问它。
- 要输出简单
#PCDATA
元素
的文本值,<xsl:value-of>
请优先
使用<xsl:apply-templates>
.
(来自[ http://www.dpawson.co.uk/xsl/sect4/N9883.html#d15756e150][4])
最初来自:https ://stackoverflow.com/users/40347/0xa3
我会确保在运行之前编译您可以调用的 XSLT,这样您就不会从每次发生的编译过程中获得混合指标。
您可以使用 XslCompiledTransform 类来确保在运行之前编译 XSLT。非常重要的是,您不要丢弃它并在每次再次创建对象时以其他方式重用转换,它将重新编译并花费随机时间来完成它。
这里有一篇有趣的文章:http: //www.windowsdevcenter.com/pub/a/dotnet/2003/07/14/xsltperf.html称为 XSLT Performance in .NET
它继续将 .Net 中的 XSLT 转换基准测试到其他 xslt 引擎。
我使用 XSLT 的经验是速度非常快,除非将自定义函数添加到转换中,例如。调用不是高性能的自定义代码通常是小型到中型的工作表应该运行得非常快,特别是你没有很多导入和函数调用。
如果您真的很担心,有一篇来自 MSDN Enterprise Patterns and Practices 的精彩文章,其中有一节介绍了 XML 和 XSLT 转换的性能。
文章在这里:http: //msdn.microsoft.com/en-us/library/ff649152.aspx
我正在谈论的部分在这里:http: //msdn.microsoft.com/en-us/library/ff647804.aspx
Microsoft 发表了一篇关于 Benchmarking XSLT 的文章,读起来很有趣。
http://blogs.msdn.com/b/antosha/archive/2006/07/24/xslcompiledtransform-performance-beating-msxml-4-0.aspx
还有一种方法可以将样式表预编译成代码,这样 xslt 转换只会被加载而不被解析。
您可以在此处找到相关信息:(在 .NET 中使用预编译 XSLT)http://my-tech-talk.blogspot.co.uk/2009/03/using-precompiled-xslt-in-net.html