Variables 可变内存使用率
我是XSLT新手。我有一个XML文档,我正在使用XSL将XML转换为HTML表。XML是从服务器到web客户端的响应。在本例中,它是IE9浏览器。XSLT处理由浏览器完成。“ch3”节点的数量从1到100000不等 下面是我正在做的示例代码 在下面的xsl代码中,变量是在每个循环中创建的。我想知道这个创建对浏览器内存有什么影响。这也会对性能产生影响吗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
============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次的变量是否会导致内存问题,而不是转换的任何其他部分是否会。即使如此,多次释放和分配内存通常会导致内存碎片,并导致垃圾收集器的更多工作(并且更频繁)。