xsl-list
[Top] [All Lists]

Re: [xsl] Efficiency: predicate vs function

2007-07-23 01:54:22
On 7/22/07, Michael Kay <mike(_at_)saxonica(_dot_)com> 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

--~------------------------------------------------------------------
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>
--~--