Re: [xsl] Performance of xsl:for-each with key() lookup

Subject: Re: [xsl] Performance of xsl:for-each with key() lookup
From: "Wendell Piez wapiez@xxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 26 Sep 2018 21:50:42 -0000
Hey Alan, check out version 4, I'm sure Mike Kay doesn't remember the
details of that one either --

https://markmail.org/message/bapqkmmd7bz2fxce

Probably wasn't providing late variable binding.

Still giving great value! So far we have come!

Cheers, Wendell

On Wed, Sep 26, 2018 at 5:01 PM Alan Painter alan.painter@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> 10 years old and still giving great value.
>
> On Wed, Sep 26, 2018, 22:54 Michael Kay mike@xxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>>
>> The answer obviously depends on the processor.
>>
>> With Saxon, if a variable is only referenced once, and the reference isn't
in a loop, then it will be inlined. So if you write
>>
>> >   <xsl:variable name="elems" select="key('some', $value, $doc)"
>> > as="element()*"/>
>> >    <xsl:for-each select="$elems">
>>
>> then Saxon will rewrite it as
>>
>> >  <xsl:for-each select="key('some', $value, $doc)">
>>
>> The main benefit of this rewrite is better pipelining. A variable causes
the list of items to be stored somewhere in memory; without the variable, each
item is processed as soon as it is found.
>>
>> Michael Kay
>> Saxonica
>>
>> PS: Saxon 9.1 is about 10 years ago, so my memory of it is rather rusty.
>>
>>
>> > On 26 Sep 2018, at 21:40, Martynas JuseviD
ius martynas@xxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>> >
>> > Hi,
>> >
>> > I'm using the following pattern in multiple places in my stylesheets:
>> >
>> >    <xsl:for-each select="key('some', $value, $doc)">
>> >
>> > My question is, would iteration be optimized if I selected the nodes
>> > into a variable first?
>> >
>> >    <xsl:variable name="elems" select="key('some', $value, $doc)"
>> > as="element()*"/>
>> >    <xsl:for-each select="$elems">
>> >
>> > I guess it should be faster if the key() function is called only once
>> > instead of multiple times? But if there is an index maybe it doesn't
>> > matter?
>> >
>> > And does the same apply to
>> >
>> >    <xsl:apply-templates select="key('some', $value, $doc)"/>
>> >
>> > as well?
>> >
>> > I'm using Saxon 9.1.0.8.
>> >
>> >
>> > Martynas
>> >
>>
> XSL-List info and archive
> EasyUnsubscribe (by email)



--
Wendell Piez | http://www.wendellpiez.com
XML | XSLT | electronic publishing
Eat Your Vegetables
_____oo_________o_o___ooooo____ooooooo_^

Current Thread