This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Regarding XSL performance on AIX
- From: "Anand Ganapathy" <Anand dot Ganapathy at cgi dot ca>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Fri, 17 May 2002 09:57:21 +0530
- Subject: [xsl] Regarding XSL performance on AIX
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hi,
I am performing a server side XSL (using java TransformerFactory classes) on the following XML.
<?xml:stylesheet type="text/xsl" href="Hierarchy.xsl" version="1.0" encoding="UTF-8"?>
<!-- <?xml version="1.0" encoding="UTF-8"?> -->
<NODE1>
<NODEADDRESS>1</NODEADDRESS>
<LEVELIDENTIFIER>1</LEVELIDENTIFIER>
<NODENAME>STOP AND SHOP </NODENAME>
<ISGREY>0</ISGREY>
<NODE2>
<NODEADDRESS>1:1</NODEADDRESS>
<LEVELIDENTIFIER>2</LEVELIDENTIFIER>
<NODENAME>GROCERY </NODENAME>
<ISGREY>1</ISGREY>
<NODE3>
<NODEADDRESS>1:1:1</NODEADDRESS>
<LEVELIDENTIFIER>3</LEVELIDENTIFIER>
<NODENAME>GROCERY OTHER </NODENAME>
<ISGREY>0</ISGREY>
<NODE4>
<NODEADDRESS>1:1:1:1</NODEADDRESS>
<LEVELIDENTIFIER>5</LEVELIDENTIFIER>
<NODENAME>GRATED CHEESE </NODENAME>
<ISGREY>1</ISGREY>
</NODE4>
120 records of type Node 4
<NODE4>
<NODEADDRESS>1:1:1:128</NODEADDRESS>
<LEVELIDENTIFIER>5</LEVELIDENTIFIER>
<NODENAME>IRISH FOODS </NODENAME>
<ISGREY>0</ISGREY>
</NODE4>
</NODE3>
</NODE2>
<NODE2>
<NODEADDRESS>1:2</NODEADDRESS>
<LEVELIDENTIFIER>2</LEVELIDENTIFIER>
<NODENAME>GENERAL MERCH </NODENAME>
<ISGREY>1</ISGREY>
</NODE2>
<NODE2>
<NODEADDRESS>1:3</NODEADDRESS>
<LEVELIDENTIFIER>2</LEVELIDENTIFIER>
<NODENAME>PRODUCE </NODENAME>
<ISGREY>0</ISGREY>
</NODE2>
<NODE2>
<NODEADDRESS>1:4</NODEADDRESS>
<LEVELIDENTIFIER>2</LEVELIDENTIFIER>
<NODENAME>MEAT </NODENAME>
<ISGREY>1</ISGREY>
</NODE2>
<NODE2>
<NODEADDRESS>1:5</NODEADDRESS>
<LEVELIDENTIFIER>2</LEVELIDENTIFIER>
<NODENAME>FROZEN </NODENAME>
<ISGREY>0</ISGREY>
</NODE2>
<NODE2>
<NODEADDRESS>1:6</NODEADDRESS>
<LEVELIDENTIFIER>2</LEVELIDENTIFIER>
<NODENAME>FLORIST </NODENAME>
<ISGREY>1</ISGREY>
</NODE2>
<NODE2>
<NODEADDRESS>1:7</NODEADDRESS>
<LEVELIDENTIFIER>2</LEVELIDENTIFIER>
<NODENAME>DAIRY </NODENAME>
<ISGREY>0</ISGREY>
</NODE2>
<NODE2>
<NODEADDRESS>1:8</NODEADDRESS>
<LEVELIDENTIFIER>2</LEVELIDENTIFIER>
<NODENAME>HBC </NODENAME>
<ISGREY>1</ISGREY>
</NODE2>
</NODE1>
Please find snippets of my XSL attached.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version = "1.0">
<xsl:output method="html"/>
<xsl:template match="/"> <!-- match for the Root Element of the XML Document -->
<xsl:apply-templates />
</xsl:template>
<xsl:template match="NODE1">
<!-- Check if this Node has Children -->
<xsl:variable name = "countofNode2">
<xsl:value-of select = "count(//NODE2)"/>
</xsl:variable>
<!-- Set the Variables like NodeAddress,levelidentifier,Nodename to be passed to
javascript functions -->
<xsl:variable name = "nodeaddr1">
<xsl:value-of select = "(//NODE1/NODEADDRESS) "/>
</xsl:variable>
<xsl:variable name = "lidentifier1">
<xsl:value-of select = "(//NODE1/LEVELIDENTIFIER) "/>
</xsl:variable>
<xsl:variable name = "nodename1">
<xsl:value-of select = "(//NODE1/NODENAME) "/>
</xsl:variable>
<xsl:variable name = "color1">
<xsl:value-of select = "(//NODE1/ISGREY) "/>
</xsl:variable>
<!-- Display "NODE1" tag -->
<table>
<xsl:if test="($color1 > 0)">
<TR class="DARK">
<TD>
<!-- Display Anchor Image Link -->
<xsl:if test="($countofNode2 > 0)">
<A class="hier" href="javascript:collapse('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
<img src="\rbrr\images\treePics\downarrow.gif" border="0" />
</A>
</xsl:if>
<xsl:if test="not($countofNode2 > 0)">
<A class="hier" href="javascript:expand('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
<img src="\rbrr\images\treePics\rightarrow.gif" border="0" />
</A>
</xsl:if>
<!-- Display Anchor Text Link -->
<A class="hier" href="javascript:selectNode('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
<xsl:value-of select="NODENAME"/>
</A>
</TD>
</TR>
</xsl:if>
<xsl:if test="(not($color1 > 0))">
<TR class="WHITE">
<TD>
<!-- Display Anchor Image Link -->
<xsl:if test="($countofNode2 > 0)">
<A class="hier" href="javascript:collapse('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
<img src="\rbrr\images\treePics\downarrow.gif" border="0" />
</A>
</xsl:if>
<xsl:if test="not($countofNode2 > 0)">
<A class="hier" href="javascript:expand('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
<img src="\rbrr\images\treePics\rightarrow.gif" border="0" />
</A>
</xsl:if>
<!-- Display Anchor Text Link -->
<A class="hier" href="javascript:selectNode('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
<xsl:value-of select="NODENAME"/>
</A>
</TD>
</TR>
</xsl:if>
</table>
<xsl:variable name="j" select="1"> </xsl:variable>
<xsl:variable name = "count1">
<xsl:value-of select = "count(//NODE2)"/>
</xsl:variable>
<xsl:call-template name = "forloop1" >
<xsl:with-param name = "j" select = "$j"/>
<xsl:with-param name = "count1" select = "$count1"/>
</xsl:call-template>
</xsl:template>
<!-- Anand Forloop1-->
<xsl:template name= "forloop1">
<xsl:param name = "j"/>
<xsl:param name = "count1"/>
<!-- Check if this Node has Children -->
<xsl:variable name = "countofNode3">
<xsl:value-of select = "count(//NODE2[$j]/NODE3)"/>
</xsl:variable>
<xsl:variable name="i" select="1"> </xsl:variable>
<xsl:variable name = "count2">
<xsl:value-of select = "count(//NODE2[$j]/NODE3) "/>
</xsl:variable>
<xsl:variable name = "nodeaddr2">
<xsl:value-of select = "(//NODE2[$j]/NODEADDRESS) "/>
</xsl:variable>
<xsl:variable name = "lidentifier2">
<xsl:value-of select = "(//NODE2[$j]/LEVELIDENTIFIER) "/>
</xsl:variable>
<xsl:variable name = "nodename2">
<xsl:value-of select = "(//NODE2[$j]/NODENAME) "/>
</xsl:variable>
<xsl:variable name = "color2">
<xsl:value-of select = "(//NODE2[$j]/ISGREY) "/>
</xsl:variable>
<!-- For "Node2" tag -->
<xsl:if test="($count1 > 0)">
<xsl:if test="($color2 > 0)">
<TR class="DARK">
<TD>  
<!-- Display Anchor Image Link -->
<xsl:if test="($countofNode3 > 0)">
<A class="hier" href="javascript:collapse('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
<img src="\rbrr\images\treePics\downarrow.gif" border="0" />
</A>
</xsl:if>
<xsl:if test="not($countofNode3 > 0)">
<A class="hier" href="javascript:expand('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
<img src="\rbrr\images\treePics\rightarrow.gif" border="0" />
</A>
</xsl:if>
<!-- Display Anchor Text Link -->
<A class="hier" href="javascript:selectNode('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
<xsl:value-of select="//NODE2[$j]/NODENAME"/>
</A>
</TD>
</TR>
</xsl:if>
<xsl:if test="(not($color2 > 0))">
<TR class="WHITE">
<TD>  
<!-- Display Anchor Image Link -->
<xsl:if test="($countofNode3 > 0)">
<A class="hier" href="javascript:collapse('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
<img src="\rbrr\images\treePics\downarrow.gif" border="0" />
</A>
</xsl:if>
<xsl:if test="not($countofNode3 > 0)">
<A class="hier" href="javascript:expand('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
<img src="\rbrr\images\treePics\rightarrow.gif" border="0" />
</A>
</xsl:if>
<!-- Display Anchor Text Link -->
<A class="hier" href="javascript:selectNode('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
<xsl:value-of select="//NODE2[$j]/NODENAME"/>
</A>
</TD>
</TR>
</xsl:if>
</xsl:if>
In a similar fashion by calling nested templates, I transform the XSL to display the XML as a collapsible tree.
When I do the transformation on WindowsNT it takes 20/25 seconds wheres on AIX it takes 3/4 minutes. I just can figure out why? Does any one have any idea why this happens? Please tell me how I can fine tune my XSL for enhanced performance.
Thanks,
Anand
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list