Re: [xsl] Efficiency: predicate vs function

Subject: Re: [xsl] Efficiency: predicate vs function
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Mon, 23 Jul 2007 09:54:03 +0100
On 7/22/07, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> For example, to return a sequence of all items but the last [sic: first],
> which of the following is better?
>
> $x[ position() > 1 ]
>
> or
>
> remove( $x , 1 )
>

It's impossible to say in general, it's processor-dependent. Saxon compiles
both of these into exactly the same code, effectively an expression
tail($x). This construct is specially recognized at run-time to avoid
copying the sequence unnecessarily.

Use saxon:explain="yes" if you're interested in details of how Saxon has
compiled the code.

For some anecdotal evidence, when I had this exact requirement for the Sudoku Solver [1] and switched from $seq[position() > 1] to subsequence($seq, 2) the performance increase was significant.

The change was made in some heavily used parts of the stylesheet and
although I never benchmarked the difference it was significant enough
to stick in my mind - around say 10 seconds on a transform that was
taking ~50 seconds at the time.  (which now takes around ~1.5secs in
the latest version :-)

[1] http://andrewjwelch.com/code/xslt/sudoku/sudoku-solver.html

--
http://andrewjwelch.com

Current Thread