Performance 在XSLT:xsl:element name=”中寻找更好的性能;分区;vs.<;部门>;

Performance 在XSLT:xsl:element name=”中寻找更好的性能;分区;vs.<;部门>;,performance,xslt,xml-parsing,Performance,Xslt,Xml Parsing,在编写XHTML元素时,XSLT中有哪些性能更好 <xsl:element name="div"> <xsl:attribute name="class">someclass</xsl:attribute> </xsl:element> 某类 或者干脆写下来 <div class="someclass"></div> 它在处理速度/性能等方面有什么不同吗?我怀疑XSLT编译器可能会在内部将一个转换为另一个,而

在编写XHTML元素时,XSLT中有哪些性能更好

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

某类
或者干脆写下来

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


它在处理速度/性能等方面有什么不同吗?

我怀疑XSLT编译器可能会在内部将一个转换为另一个,而且,可以肯定的是,至少会:

文本结果元素现在可以编译了 内部转换为xsl:element和 xsl:属性指令。这 导致跟踪输出发生更改: 现在,每个属性都被跟踪为 单独指示


更一般地说,这闻起来像是一种微优化,不太可能带来超过选择更可读版本的好处的改进。

任何XSL transformer旁边都会将两个变体映射到相同的内部表示。刚刚用saxonb xslt 9测试了一百万个调用:完全没有区别。

写出元素是否具有更好的性能取决于xslt处理器。处理器可能会优化第一个,使其具有与第二个相同的性能。在实现了XSLT处理器之后,我建议将元素写出来而不是使用xsl:element可能同样快,也可能更快,也可能更慢

您不会从这种重构中获得任何合理的性能增益(您能感觉到一微秒的差异吗)

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

<div class="someclass"/>
<someElement attr="{someExpression}"/>

即使在元素具有动态计算其值的属性的情况下,始终尝试写入

<div class="someclass"/>
<someElement attr="{someExpression}"/>

而不是:

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

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

要测试编译器中哪个更快,请创建两个XSL,重复相同的内容10000次,然后在前端测试处理速度。然后将时间差除以10000,就得到了速度的真正差异


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

后者当然更具可读性!没错。在大多数情况下,
可读性>性能
结果在不同的处理器中肯定会有所不同。在某些情况下,如果不计算元素/属性名,则不会有任何区别。在某些方面会有所不同。请参阅libxslt上下文中的。这一性能影响是否微不足道完全取决于您。好问题,+1。请看我的回答,我推荐使用某种形式来编写带有属性的文本结果元素——在任何这样的重构中都没有明显的性能提升,但可读性的提高是巨大的。对于Saxon来说,这当然是正确的——它将两者编译成相同的内部代码。但和所有性能问题一样,这个问题只能问特定的处理器/实现,而不能问语言。但是请注意,给出的两个表达式不是同义词:LRE从样式表复制名称空间,而xsl:element则不是。如果您有性能问题,此更改无法解决。如果你没有遇到性能问题,为什么还要担心呢?我想你不能根据人类的认知来评价软件工程中的某些东西。即使是一微秒。问题肯定是什么更有效但我理解你的观点。@ChrisBenyamin:你可能不尊重我的意见,但你当然应该尊重@Michael Kay的意见(参见他对@lwburk答案的评论)。我应该解释一下迈克尔·凯是谁吗?另外,请记住另一个传说(Knuth)所说的:“过早优化是万恶之源”。