Как мне профилировать и оптимизировать XSLT? - PullRequest
29 голосов
/ 12 января 2009

У меня есть XSLT для просмотра файлов XML в браузере. XSLT написан наивно и в настоящее время занимает много времени (несколько минут).

Мой XML-файл имеет скромный размер (~ 1 МиБ), и другие XSLT для того же документа, которые выполняют различную обработку, выполняются намного быстрее. Так что я знаю, что проблема не в размере XML, а в моем XSLT.

Как мне профилировать и оптимизировать мой XSLT?

(Это плохая идея - делать сложные XSLT в браузере? Стоит ли вместо этого применять сторону приложения XSLT?)

Ответы [ 4 ]

30 голосов
/ 12 января 2009

какой движок XSLT вы используете? Если вы используете .NET engine и Visual Studio, вы можете использовать XSLT profiler , интегрированный в Visual Studio, что очень полезно.

Другими отличными инструментами профилирования являются XML Spy * Altova и Oxygen .

Если вы опубликуете свой XSLT, вам будет легче сказать, где возможны узкие места. В общем, будьте осторожны с выражениями XPath, такими как «//», предшествующими :: * и следующими :: *. Еще несколько правил и рекомендаций:

  1. Избегайте повторного использования "//item".
  2. Не оценивайте один и тот же набор узлов более одного раза; сохранить его в переменной.
  3. Избегайте <xsl:number>, если можете. Например, с помощью position ().
  4. Используйте <xsl:key>, например, для решения проблем группировки.
  5. Избегайте сложных шаблонов в шаблонных правилах. Вместо этого используйте в рамках правила.
  6. Будьте осторожны при использовании preceding[-sibling] или following[-sibling] осей. Это часто указывает алгоритм с n-квадратом производительность.
  7. Не сортируйте один и тот же набор узлов более одного раза. При необходимости сохраните его в результате фрагмент дерева и доступ это с использованием расширения node-set() функция.
  8. Чтобы вывести текстовое значение простого элемента #PCDATA, используйте <xsl:value-of> в предпочтении <xsl:apply-templates>.

(из http://www.dpawson.co.uk/xsl/sect4/N9883.html#d15756e150)

Следование этим правилам обычно приводит к очень эффективному XSLT, и вам, возможно, вообще не понадобится использовать профилировщик.

Относительно вашего вопроса о XSLT в браузере: я бы не рекомендовал его, потому что, во-первых, вы не независимы от платформы (не каждый браузер может поддерживать его, или некоторые браузеры могут поддерживать его только с плохо работающим движком), а во-вторых, вы можете ' t управлять использованным двигателем.

21 голосов
/ 12 января 2009

Если вы предоставите код XSLT и документ XML, в котором вы наблюдаете проблему, я и другие люди могли бы попытаться помочь .

Вот некоторые советы по использованию и производительности XSLT от Michael Kay :

Восемь советов по эффективному использованию XSLT :

  1. Держите исходные документы маленькими. При необходимости сначала разбейте документ.
  2. Сохранять процессор XSLT (и Java VM) загруженным в памяти между запусками
  3. Если вы неоднократно используете одну и ту же таблицу стилей, сначала скомпилируйте ее.
  4. Если вы неоднократно используете один и тот же исходный документ, сохраните его в памяти.
  5. Если вы выполняете одно и то же преобразование несколько раз, не делайте этого. Вместо этого сохраните результат.
  6. Держите выходной документ маленьким. Например, если вы генерируете HTML, используйте CSS.
  7. Никогда не проверяйте один и тот же исходный документ более одного раза.
  8. Разделение сложных преобразований на несколько этапов.

Восемь советов, как написать эффективный X SLT:

  1. Избегайте повторного использования "//item".
  2. Не оценивайте один и тот же набор узлов более одного раза; сохранить его в переменной.
  3. Избегайте <xsl:number>, если можете. Например, используя position().
  4. Используйте <xsl:key>, например, для решения проблем группировки.
  5. Избегайте сложных шаблонов в шаблонных правилах. Вместо этого используйте <xsl:choose> в правиле.
  6. Будьте осторожны при использовании preceding[-sibling] или following[-sibling] Оси. Это часто указывает алгоритм с n в квадрате производительности.
  7. Не сортируйте один и тот же набор узлов более одного раза. При необходимости сохраните его как фрагмент дерева результатов и получить к нему доступ с помощью функции расширения node-set().
  8. Чтобы вывести текстовое значение простого элемента #PCDATA, используйте <xsl:value-of> в предпочтении до <xsl:apply-templates>.
2 голосов
/ 12 января 2009

Коммерческий Oxygen XML редактор имеет функцию для профилирования и отладки XSLT-файлов. Это также хороший редактор XML.

1 голос
/ 12 января 2009

Мне нравится использовать XMLSpy Altova для машин на базе Windows. Он также имеет встроенный профилировщик. Вы можете проверить видео с помощью редактора . (отсканируйте в 5:45, чтобы узнать больше о профилировщике). Это коммерческий продукт ... с испытательным сроком:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...