在XSLT中寻找更好的性能:xsl:element name =“div”与<div> </div>

时间:2011-03-06 21:39:19

标签: performance xslt xml-parsing

在编写XHTML元素时,XSLT的性能更高

<xsl:element name="div">
  <xsl:attribute name="class">someclass</xsl:attribute>
</xsl:element>

或者只是把它写出来

<div class="someclass"></div>

处理速度/性能等方面是否有任何区别?

5 个答案:

答案 0 :(得分:3)

我怀疑XSLT编译器可能会在内部将一个转换为另一个,当然,至少some of them会这样做:

  

现在可以编译文字结果元素   内部进入xsl:element和   xsl:属性说明。这个   导致跟踪输出的变化:   每个属性现在都被追踪为   单独的指示。

更一般地说,这类似于微观优化,不太可能带来改进,超过选择更易读的版本的好处。

答案 1 :(得分:1)

在任何XSL转换器旁边都会将两个变体映射到相同的内部表示中。刚用saxonb-xslt测试了一百万次调用9:绝对没有区别。

答案 2 :(得分:1)

可读性仅在开发周期中很重要。使用XSL动态显示的高负载站点将希望减少看似不可能的小时间。

要测试编译器中哪个更快,请创建两个重复相同事物10,000次的XSL,然后在前端对基准测试处理速度进行基准测试。然后将时差除以10,000,就可以得到真正的速度差异。

根据XSL的大小也会产生影响。 xsl:element中完全设计的页面将比直接HTML大得多。但是,如果在该方法中使用XSL,则应重新考虑将特定数据分解为XML / XSL包含,并在页面模板的其余部分进行其他操作。

答案 3 :(得分:0)

写出元素是否具有更好的性能取决于XSLT处理器。处理器可以优化第一个以获得与第二个相同的性能。实现了一个XSLT处理器之后,我建议将元素写出来而不是使用xsl:element可能要么快,要么更快,而且不太可能慢。

答案 4 :(得分:0)

你不会从这种重构中获得任何合理的性能提升(你能感受到微秒的差异)吗?

但是,我强烈建议使用最易读的版本

<div class="someclass"/>

即使在元素具有动态计算其值的属性的情况下,也总是尝试写

<someElement attr="{someExpression}"/>

而不是:

<someElement>
 <xsl:attribute name="attr">
  <xsl:value-of select="someExpression"/>
 </xsl:attribute>
</someElement>