Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 可变内存使用率_Variables_Xslt_Memory_Browser - Fatal编程技术网

Variables 可变内存使用率

Variables 可变内存使用率,variables,xslt,memory,browser,Variables,Xslt,Memory,Browser,我是XSLT新手。我有一个XML文档,我正在使用XSL将XML转换为HTML表。XML是从服务器到web客户端的响应。在本例中,它是IE9浏览器。XSLT处理由浏览器完成。“ch3”节点的数量从1到100000不等 下面是我正在做的示例代码 在下面的xsl代码中,变量是在每个循环中创建的。我想知道这个创建对浏览器内存有什么影响。这也会对性能产生影响吗 ============XMLDoc======= <?xml version="1.0" encoding="ISO-88

我是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=======
================XMLDoc=======
......        
================XMLDoc=======
================XSLSheet=======
......
橙色
红色
白色
格力
黄色的
蓝色
.............
.............
================XSL工作表=======

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

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


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

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

可能根本不需要变量。你需要这种颜色做什么?用于样式还是用于表格内容?此外,您的代码还存在一些“风格”问题。如果我们能看到更多,我们将能够就一些XSLT最佳实践向您提供建议(例如,避免使用for each/choose,改用模板匹配)。Flynn1179,他正在做的事情由
xsl:for each
中的省略号表示,即“每次迭代后都可以释放内存”在转换过程中的某些点上,以及在可能相当长的时间内,最大内存需求可能会很高,这一点无法避免。很可能,但这与问题或我的答案无关。他询问被创建100000次的变量是否会导致内存问题,而不是转换的任何其他部分是否会。即使如此,多次释放和分配内存通常会导致内存碎片,并导致垃圾收集器的更多工作(并且更频繁)。