Subject: RE: A question on optimization
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 3 Nov 2004 11:10:34 -0000
|
Optimization and performance depend on the processor.
As it happens, with Saxon, if you use "//x" inside a loop then Saxon will
remember the value and avoid re-evaluating it each time, while if you use
/*/x, it won't.
The moral is, don't guess - measure!
Putting the value in a variable that's set outside the loop, whatever the
expression used, is almost certainly not going to make performance any
worse.
I don't think there's likely to be any significant difference between using
a single-valued key, as shown here, and using a global variable. Using a
global variable seems much more intuitive.
But here I'm guessing.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Geert Josten [mailto:Geert.Josten@xxxxxxxxxxx]
> Sent: 03 November 2004 08:57
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: A question on optimization
>
> Hi Jochen,
>
> > <xsl:for-each select="//justus:choice">
> > <xsl:element name="TR">
> > <xsl:variable name="current" select="."/>
> > <xsl:for-each select="//justus:part[@visible='true']">
> > <xsl:variable name="dbfeld" select="."/>
> > <xsl:element name="td">
> > <xsl:for-each
> > select="$current/@*[name()=$dbfeld/@dbfeld]">
> > <xsl:value-of select="."/>
> > </xsl:for-each>
> > </xsl:element>
> > </xsl:for-each>
> > </xsl:element>
> > </xsl:for-each>
>
> ...
>
> > <xsl:for-each select="//justus:choice">
> > <xsl:element name="tr">
> > <xsl:element name="td"><xsl:value-of
> select="a1"/></xsl:element>
> > <xsl:element name="td"><xsl:value-of
> select="a2"/></xsl:element>
> > ...
> > </xsl:element>
> > </xsl:for-each>
>
> David is right. Using // is rather expensive in terms of
> performance. Use full paths as David
> suggests, or try using keys if the choice and part elements
> may occur in unpredictable locations:
>
> <xsl:key name="choices" match="justus:choice" use="'all'" />
> <xsl:key name="parts" match="justus:part" use="'all'" />
>
> <xsl:for-each select="key('choices', 'all')">
>
> and
>
> <xsl:for-each select="key('parts', 'all')[@visible='true']">
>
> Grtz,
> Geert
|