performance - XSLT 性能

标签 performance xslt

我正在从事一个包含许多 XSLT 转换的项目。 转换必须尽可能快。

为了便于阅读,我编写了许多内容,将“业务逻辑”和 “输出”。例如

<!-- Business Logic -->
 <xsl:variable name="myLocalVar">
      <xsl:value-of select="func:whateverComputation(params)" />
</xsl:variable>

<!-- more buss logic here -->

<!-- Output -->
<xsl:element name="mytag">
    <xsl:value-of select="$myLocalVar" />
</xsl:element>

当然这可以写成紧凑的形式

<xsl:element name="mytag">
      <xsl:value-of select="func:whateverComputation(params)" />
</xsl:element>

第一种形式比第二种形式慢吗?

最佳答案

摘自 the XSLT FAQ 的一部分:

与 XSLT 性能相关的几点:

  1. xsl:variables是动态值。这些变量不在缓存中,并且每次在 XSL 中引用它们时都会运行。 xsl:variable 的显式类型转换提高性能。您可以使用 string() 进行类型转换和boolean()功能。

    例如:

    <xsl:variable name="_attr" select="string( /node/child[ @attr ] )">

  2. 尽可能使用属性,而不是使用子元素。使用属性而不是元素可以提高性能。执行 XPath 匹配时,属性速度更快,因为它们是松散类型的。这使得模式验证变得更加容易。

  3. 当您匹配属性值时,请使用枚举器属性。使用多个属性名称作为位,并将它们的值设置为 true 或 false。

有关如何有效使用 XSLT 的八个技巧:

  1. 保持源文档较小。如有必要,请先拆分文档。

  2. 在运行之间保持 XSLT 处理器(和 Java VM)加载在内存中

  3. 如果重复使用相同的样式表,请先编译它。

  4. 如果您重复使用相同的源文档,请将其保留在内存中。

  5. 如果您重复执行相同的转换,请不要这样做。而是存储结果。

  6. 保持输出文档较小。例如,如果您要生成 HTML,请使用 CSS。

  7. 切勿多次验证同一源文档。

  8. 将复杂的转换分为几个阶段。

有关如何编写高效 XSLT 的八个技巧:

  1. 避免重复使用“//item”。

  2. 不要多次评估同一节点集;将其保存在变量中。

  3. 避免 <xsl:number>如果可以的话。例如,通过使用 position() .

  4. 使用<xsl:key> ,例如解决分组问题。

  5. 避免模板规则中出现复杂的模式。相反,使用 <xsl:choose>在规则之内。

  6. 使用preceding[-sibling]时要小心或following[-sibling]轴。这通常表明算法具有 n 平方性能。

  7. 不要对同一节点集进行多次排序。如有必要,将其保存为结果树片段并使用 node-set() 访问它扩展功能。

  8. 输出简单的 #PCDATA 的文本值元素,使用<xsl:value-of>优先于<xsl:apply-templates> .

关于performance - XSLT 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9398953/

相关文章:

Python - 简化数独求解器代码

php - Azure 应用服务 - Wordpress 的糟糕性能

c++ - C/C++ : Float comparison speed

javascript - 如何将 XML 转换为 XML 客户端

java - 使用 XSLT 转换 XML 时如何防止 fatal error

java - 在 XML 上应用 XSLT 以获得格式化(彩色)输出

PHP 红 bean ORM 性能问题

java - java.util.priorityqueue是如何实现的?

xml - xslt - 添加 </tr><tr> 每 n 个节点?

xml - 声明一个 xsl 变量并为其赋值