Как мне рассчитать время выполнения XSLT с точностью до миллисекунды? - PullRequest
2 голосов
/ 09 января 2012

У меня есть XSLT (работающий под Sitecore), который я хотел бы сравнить с эталонным.

Например:

<xsl:variable name="start_ms" select="TIME IN MILLIS" />

Do something

<xsl:variable name="end_ms" select="TIME IN MILLIS" />
<xsl:variable name="total_ms" select="$end_ms - $start_ms" />

Do something else

К сожалению, мне не удается получить время в миллисекундахТочность.

Если я включу xmlns:date="http://exslt.org/dates-and-times", я получу date:dateTime(), но это касается только секундной точности.

Аналогично, sc:formatdate(sc:isoNow(),'ss.ffff') также идет только с точностью до секунд.

Функциональность Sitecore "страница отладки" скажет мне, сколько времени потребуется для запуска всего XSLT, но не позволит мне сравнить отдельные компоненты XSLT.

Есть ли способ сделать это?

Ответы [ 2 ]

7 голосов
/ 09 января 2012

Функциональность Sitecore «страница отладки» подскажет мне, сколько времени потребуется для запуска всего XSLT, но не позволит мне сравнить отдельные компоненты XSLT.

Есть ли способ сделать это?this?

Это сильно зависит от используемого вами процессора XSLT, и результаты, как правило, могут не заслуживать доверия .

Даже если вы пишете свои собственные функции расширенияи вызывать их из кода XSLT (который, кажется, является единственным способом достижения желаемой точности синхронизации), ничто не гарантирует, что функция расширения будет вызываться, когда ожидается.или что он не будет вызываться более одного раза, когда ожидается один вызов.Это связано с тем, что мы не можем предсказать и предвидеть решение оптимизатора, используемого конкретным процессором XSLT.

Некоторые процессоры XSLT реализуют отложенная оценка - выражение не оценивается, если оно не сталоабсолютно необходимо для получения результата.Такой процессор будет выполнять вызов функции расширения синхронизации только тогда, когда используется его результат - и это может быть в конце измеренной обработки - поэтому в этом случае любая измеренная обработка будет "мгновенной".

1 голос
/ 11 января 2012

Если вы пытаетесь определить узкое место в обработке, вы можете переместить отдельные компоненты один за другим в новый XSLT, измеряя миллисекунды на каждом шаге, используя инструмент отладки.

...