xsl-list
[Top] [All Lists]

RE: A question on optimization

2004-11-03 04:10:34
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(_dot_)Josten(_at_)daidalos(_dot_)nl] 
Sent: 03 November 2004 08:57
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] 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[(_at_)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')[(_at_)visible='true']">

Grtz,
Geert

--+------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--