Subject: Re: [xsl] Performance of xsl:for-each with key() lookup From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 26 Sep 2018 20:54:08 -0000 |
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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Performance of xsl:for-each w, Martynas Jusevičius | Thread | Re: [xsl] Performance of xsl:for-ea, Alan Painter alan.pa |
[xsl] Performance of xsl:for-each w, Martynas Jusevičius | Date | Re: [xsl] Performance of xsl:for-ea, Alan Painter alan.pa |
Month |