[xsl] performance with template and choose

Subject: [xsl] performance with template and choose
From: "Kimberly Hahn" <Kimberly.Hahn@xxxxxxxxxx>
Date: Wed, 11 Sep 2002 16:19:46 -0500
I have a transformation that takes roughly 2.8 sec to run (using MSXML).  I
made some changes to it, moving some of the template matches into a choose
within a broader template.  This change was made for functional reasons, but
it cut the transformation time down to 1.4 sec.  I was just curious if
someone could shed light on why there was the performance improvement.

Sample differences:
slower version was structured as -
<xsl:template match="KH[@Type='401']/Key[@ProdID ='83' and
translate(@StopVal, '-','') &lt;='20050911']/MD[@ACPID='100']/@AAvl"
priority="1001" >
<xsl:attribute name="AAvl">1</xsl:attribute>
</xsl:template>
<xsl:template match="KH[@Type='401']/Key[@ProdID ='83' and
translate(@StopVal, '-','') &lt;='20050911']/MD[@BCPID='100']/@BAvl"
priority="1002" >
<xsl:attribute name="BAvl">1</xsl:attribute>
</xsl:template>
<xsl:template match="KH[@Type='401']/Key[@ProdID ='83' and
translate(@StopVal, '-','') &lt;='20030911']/MD[@ACPID='10']/@AAvl"
priority="1003" >
<xsl:attribute name="AAvl">1</xsl:attribute>
</xsl:template>
<xsl:template match="KH[@Type='401']/Key[@ProdID ='83' and
translate(@StopVal, '-','') &lt;='20030911']/MD[@BCPID='10']/@BAvl"
priority="1004" >
<xsl:attribute name="BAvl">1</xsl:attribute>
</xsl:template>
<xsl:template match="KH[@Type='401']/Key[@ProdID ='83' and
translate(@StopVal, '-','') &lt;='20030311']/MD[@ACPID='3']/@AAvl"
priority="1005" >
<xsl:attribute name="AAvl">1</xsl:attribute>
</xsl:template>
<xsl:template match="KH[@Type='401']/Key[@ProdID ='83' and
translate(@StopVal, '-','') &lt;='20030311']/MD[@BCPID='3']/@BAvl"
priority="1006" >
<xsl:attribute name="BAvl">1</xsl:attribute>
</xsl:template>

faster version as -
<xsl:template match="KH/Key[@ProdID ='83']/MD/@AAvl" priority="1001">
<xsl:attribute name="AAvl">
<xsl:choose>
<xsl:when test="translate(ancestor::Key/@StopVal, '-','') &lt;='20030311'
and (parent::MD/@ACPID='3')">1</xsl:when>
<xsl:when test="translate(ancestor::Key/@StopVal, '-','') &lt;='20030911'
and (parent::MD/@ACPID='10')">1</xsl:when>
<xsl:when test="translate(ancestor::Key/@StopVal, '-','') &lt;='20050911'
and (parent::MD/@ACPID='100')">1</xsl:when>
</xsl:choose>
</xsl:attribute>
</xsl:template>
<xsl:template match="KH/Key[@ProdID ='83']/MD/@BAvl" priority="1001">
<xsl:attribute name="BAvl">
<xsl:choose>
<xsl:when test="translate(ancestor::Key/@StopVal, '-','') &lt;='20030311'
and (parent::MD/@BCPID='3')">1</xsl:when>
<xsl:when test="translate(ancestor::Key/@StopVal, '-','') &lt;='20030911'
and (parent::MD/@BCPID='10')">1</xsl:when>
<xsl:when test="translate(ancestor::Key/@StopVal, '-','') &lt;='20050911'
and (parent::MD/@BCPID='100')">1</xsl:when>
</xsl:choose>
</xsl:attribute>
</xsl:template>

All other things (other named templates and unrelated template matches) in
the XSL documents were unchanged.


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread