[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Is failed key-lookups very slow in Xalan-J 1.2?

Subject: Re: Is failed key-lookups very slow in Xalan-J 1.2?
From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx>
Date: Wed, 22 Nov 2000 12:58:01 +0000
key problems in xsl xalan
Thorbjørn,

> My timings show that if I replace the key-lookup with an empty string,
> my code runs in 0.5 seconds (overhead from other routines), and if my
> key-function succeedes in all 66 cases for my sample file then it runs
> in about 1.0 second.  Each key-lookup returns either 0 or 1 node.
>
> If the key-function _fails_ in all 66 cases then it runs in 5.5
> seconds, which is rather unfortunate, since this is the default setup
> for unregistered users.
>
> Narrowing the scope for the key-function with a xsl:for-each around,
> did not help.

Just to alleviate a misunderstanding: using an xsl:for-each around the
call to the key function doesn't change the scope of the key function
unless the xsl:for-each selects nodes in a different document.  The
key function *always* looks throughout the entire document for nodes
matching its 'match' pattern.

I would have thought that narrowing the scope of the key will only
decrease the time involved if there are VALUENUMs that you're not
interested in at all.  If that's the case, then its best to filter
them out using the key's 'match' pattern.  For example, if there are
VALUENUMs in table0 that you are interested in *and* VALUENUMs in
the table1 that you're never interested in, then you could change the
match patten to:

<xsl:key name="price-for"
         match="table0/record0/VALUENUM"
         use="../PRICEKEY"/>

This will produce a smaller hashtable for the key, and therefore
quicker lookup times, but only if it actually matches a smaller number
of VALUENUMs than it does at the moment.

The other workaround would be to avoid using the key if you know that
its not going to return a value.  You say that it will never return a
value for unregistered users - is there any way to tell whether they
are unregistered?  Perhaps the $ACCESSCODE is an empty string, for
example?  If that were the case, you could avoid the lookups with
something like:

<xsl:template match="STIBO-PRICE">
  <xsl:choose>
    <xsl:when test="not($ACCESSCODE)">
      <xsl:value-of select="$PRICELESS" />
    </xsl:when>
    <xsl:otherwise>
      <xsl:variable name="value" select="concat(@value,',',$ACCESSCODE)"/>
      <xsl:variable name="price" select="key('price-for', $value)"/>
      <xsl:choose>
        <xsl:when test="string-length($price)=0">
          <xsl:value-of select="$PRICELESS"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$price"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

or (better) avoid calling the template at all if it will never return
anything interesting.

The other thing is that it's always possible that this is a Xalan bug
- make sure you have the latest version and see whether the Xalan
support team can help at all - or a problem to do with the version of
the Java virtual machine that you're using - as Mike reported
yesterday, Sun's JDK 1.3 can sometimes be a lot faster than
Microsoft's JVM.

Sorry I can't be more help,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/



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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.