2

我是 XSLT 的新手。我有一个 XML 文档,我正在使用 XSL 将 XML 转换为 HTML 表。XML 是从服务器到 Web 客户端的响应。在这种情况下,它是 IE9 浏览器。XSLT 处理是由浏览器完成。“ch3”节点的数量范围从 1 到 100000。

下面是我正在做的示例代码。

在下面的 xsl 代码中,变量是在每个循环中创建的。我想知道这种创建对浏览器内存的影响。这也会对性能产生影响吗?

    ============XMLDoc=======
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <root>
    <ch1>
      <ch2>
       <ch3 a="bosy" b="" c="5" d="nobody"/>
        ......        

     </ch2>
    </ch1>
    </root>

     ============XMLDoc=======
      ============XSLSheet=======

     <?xml version="1.0" encoding="ISO-8859-1"?>
     <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:template match="root/ch1">
        ......
      <xsl:for-each select="ch1/ch">
        <xsl:variable name="color">
         <xsl:choose>
         <xsl:when test="@c = '5'">orange</xsl:when>
          <xsl:when test="@c = '4'">red</xsl:when>
         <xsl:when test="@c = '3'">white</xsl:when>
         <xsl:when test="@c = '2'">gree</xsl:when>
         <xsl:when test="@c = '1'">yellow</xsl:when>
         <xsl:when test="@c = '0'">blue</xsl:when>
        </xsl:choose>
       </xsl:variable>
         .............
     </xsl:for-each>
      .............
      <xsl-template>

    </xsl:transform>

      ============XSL Sheet=======
4

3 回答 3

0

这绝对是特定于实现的,它可能会因浏览器而异。

但是,在 for-each 循环的每次迭代之后,不再需要此上下文中的变量,因此任何自尊心的 XSLT 处理器永远不需要在内存中有 100000 个值,每次迭代后都可以释放内存。

于 2012-11-28T10:28:57.737 回答
0

您需要自上而下而不是自下而上解决性能问题。你知道你的性能要求吗?你能衡量你目前取得的成绩吗?有没有差距,如果有,你能量化它吗?在这个阶段,您可以开始深入分析原因,例如通过进行受控实验来测量以特定方式更改设计的效果。推测特定构造是否效率低下是此过程的一部分,但获得答案的唯一方法是进行测量。

于 2012-11-28T11:57:34.233 回答
0

我认为 XSLT 变量非常便宜。一般来说,除非您确实遇到问题,否则我不会担心性能。您可能希望生成这些 100000 个节点的文档之一,以查看性能是否可以接受。

于 2012-11-28T08:39:09.177 回答