Here's my test:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:df="http://dita2indesign.org/dita/functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:relpath="http://dita2indesign/functions/relpath"
xmlns:glossdata="http://dita4publishers.org/glossdata"
xmlns:applicability="http://dita4publishers.org/applicability"
xmlns:mapdriven="http://dita4publishers.org/mapdriven"
xmlns:local="urn:functions:local"
xmlns:index-terms="http://dita4publishers.org/index-terms"
xmlns:date="java:java.util.Date"
xmlns:enum="http://dita4publishers.org/enumerables"
exclude-result-prefixes="local xs df xsl relpath glossdata date">
<xsl:template match="/" name="start">
<xsl:variable name="startTime" select="date:getTime(date:new())"/>
<xsl:message> + [DEBUG] Start time: <xsl:value-of
select="$startTime"/> milliseconds</xsl:message>
<xsl:for-each select="1 to 100000000">
<xsl:variable name="foo" select="."/>
<xsl:sequence select="$foo"/>
</xsl:for-each>
<xsl:variable name="endTime" select="date:getTime(date:new())"/>
<xsl:message> + [DEBUG] End time: <xsl:value-of select="$endTime"/>
milliseconds</xsl:message>
<xsl:variable name="elapsed" as="xs:integer" select="$endTime -
$startTime"/>
<xsl:message> + [DEBUG] Elapsed time: <xsl:value-of select="$elapsed
div 1000"/> seconds</xsl:message>
</xsl:template>
</xsl:stylesheet>
Which produces this result for me when run from Oxygen:
+ [DEBUG] Start time: 1415293570616
+ [DEBUG] End time: 1415293596900
+ [DEBUG] Elapsed time: 26.284 seconds
Cheers,
E.
—————
Eliot Kimber, Owner
Contrext, LLC
http://contrext.com
On 11/6/14, 9:05 AM, "Costello, Roger L. costello(_at_)mitre(_dot_)org"
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 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(_at_)saxonica(_dot_)com
[mailto:xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com]
Sent: Thursday, November 06, 2014 9:49 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_at_)saxonica(_dot_)com
+44 (0) 118 946 5893
On 6 Nov 2014, at 10:20, Costello, Roger L. costello(_at_)mitre(_dot_)org
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 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>
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--