Re: [xsl] Here's how to benchmark your XSLT program's execution time

Subject: Re: [xsl] Here's how to benchmark your XSLT program's execution time
From: "Wolfgang Laun wolfgang.laun@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 6 Nov 2014 15:56:22 -0000
Yikes, indeed.

The number of challenges raised against benchmarking is as long as my arm.
And here's my favourite one: Whenever someone tells me that this or that is
so and so fast, I pull out my notebook and say, "Hic Rhodus, hic salta."

-W


On 6 November 2014 16:06, Costello, Roger L. costello@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> > Order of evaluation is undefined in XSLT, and there is no guarantee
> > that $start is evaluated before the apply-templates call is evaluated.
>
> Yikes!
>
> So how do I write the XSLT program so that it is guaranteed that $start
> will be evaluated before the apply-templates call is evaluated?
>
> /Roger
>
> -----Original Message-----
> From: Michael Kay mike@xxxxxxxxxxxx [mailto:
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx]
> Sent: Thursday, November 06, 2014 9:49 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Here's how to benchmark your XSLT program's execution
> time
>
> If this is working, then it's only by chance.
>
> Order of evaluation is undefined in XSLT, and there is no guarantee that
> $start is evaluated before the apply-templates call is evaluated.
>
> I think this only works in Saxon because the optimizer treats calls on
> extension functions as suspicious, and tries to avoid over-optimizing them
> because of potential side-effects.
>
> Michael Kay
> Saxonica
> mike@xxxxxxxxxxxx
> +44 (0) 118 946 5893
>
>
>
>
> On 6 Nov 2014, at 10:20, Costello, Roger L. costello@xxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> > Hi Folks,
> >
> > So, you've got an XSLT program that is taking a long time to execute.
> You want to find out what part of the program is taking so much time.  You
> need to insert some start/stop timers into your XSLT. Here's how to do it:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> >                xmlns:date="java:java.util.Date"
> >                version="2.0">
> >
> >    <xsl:output method="text" />
> >    <xsl:output name="text-format" method="text"/>
> >
> >    <xsl:template match="/">
> >        <!-- Start a timer -->
> >        <xsl:variable name="start" select="date:getTime(date:new())" />
> >
> >        <!-- Do your XSLT processing -->
> >        <xsl:apply-templates />
> >
> >        <!-- End the timer -->
> >        <xsl:variable name="end" select="date:getTime(date:new())" />
> >
> >        <!-- Log the benchmarking results to a file, time-info.txt -->
> >        <xsl:result-document href="time-info.txt" format="text-format">
> >            start: <xsl:value-of select="$start" />
> >            end: <xsl:value-of select="$end" />
> >            diff: <xsl:value-of select="$end - $start" />
> >        </xsl:result-document>
> >
> >    </xsl:template>
> >
> >    <xsl:template match="*">
> >        <!-- Do something -->
> >        <xsl:text>Hello World </xsl:text>
> >        <xsl:value-of select="current-dateTime()" />
> >    </xsl:template>
> >
> > </xsl:stylesheet>

Current Thread