Xslt 性能:调用模板与应用模板

Xslt 性能:调用模板与应用模板,xslt,Xslt,在XSLT处理中,应用模板和调用模板之间是否存在性能差异?在我的样式表中,有许多实例可以使用其中任何一个,哪一个是最佳选择?应用模板和调用模板不执行相同的任务,性能比较在这里并不真正相关。 调用模板采用模板名称作为参数,而应用模板采用xpath表达式。由于您不知道将执行哪个模板,所以应用模板的功能要强大得多。 如果使用复杂的xpath表达式,将出现性能问题。避免在xpath表达式中使用“/”,因为输入文档的每个节点都将被计算。这可能取决于您使用的xml解析器。除了在.NET2003解析器中对XS

在XSLT处理中,应用模板和调用模板之间是否存在性能差异?在我的样式表中,有许多实例可以使用其中任何一个,哪一个是最佳选择?

应用模板和调用模板不执行相同的任务,性能比较在这里并不真正相关。 调用模板采用模板名称作为参数,而应用模板采用xpath表达式。由于您不知道将执行哪个模板,所以应用模板的功能要强大得多。
如果使用复杂的xpath表达式,将出现性能问题。避免在xpath表达式中使用“/”,因为输入文档的每个节点都将被计算。

这可能取决于您使用的xml解析器。除了在.NET2003解析器中对XSLT代码进行了一些非正式的性能测试外,我什么都不能说。这与您的问题类似:应用模板=推送,调用模板=拉取。我确信推会更快,但事实并非如此。差不多是平局


对不起,我现在没有准确的测试。我建议您使用您选择的解析器进行测试,看看是否有任何主要区别。我打赌不会有

与所有性能问题一样,答案将取决于您的特定配置(特别是您正在使用的XSLT处理器)和您正在执行的处理类型

获取一系列节点,并逐个遍历它们。对于每个节点,它都会找到与节点匹配的具有最高优先级的模板,并调用该模板。所以
就像一个
内部有一个
,但更模块化

相反,
按名称调用模板。上下文节点没有更改(没有
),也没有选择要使用哪个模板

因此,在完全相同的情况下,您可能会认为
会更快,因为它做的工作更少。但是,如果您处于可以使用
的情况下,您可能会在XSLT中自己执行
,而不是由处理器在幕后为您执行。所以最后我猜它可能会平衡。但正如我所说,这在很大程度上取决于您的处理器进行了何种优化,以及您正在进行的具体处理。量一下看

关于何时使用匹配模板以及何时使用命名模板,我的经验法则是:

  • 如果要处理单个节点以创建结果,请使用
    和匹配模板;如果特定节点需要以几种不同的方式处理(例如在目录与文档正文中),请使用模式
  • 如果处理的不是单个节点,例如字符串、数字或节点集,请使用
    和命名模板
  • (在XSLT2.0中)如果要返回原子值或现有节点,请使用

感谢您解释当前上下文节点上的操作提供一个示例,以便至少可以进行一些比较+1-我没有实际数据,但我非常确定
/
不仅速度慢,而且很糟糕。