Alex Rivera | Logout

How do I profile and optimize an XSLT?

Asked 2009-01-12T09:59:02.857
32

I have an XSLT for viewing XML files in the browser. The XSLT is naively written and currently takes a long time to execute (several minutes).

My XML file is of modest size (~1 MiB), and other XSLTs for the same document that do different processing execute much more quickly. So I know it isn't the size of the XML that is the problem, it's my XSLT.

How do I go about profiling and optimizing my XSLT?

(Is it a bad idea to be doing complex XSLTs in the browser? Should I instead apply the XSLT application side?)

Edit
Report

1 Answer

25

If you provide the XSLT code and the XML document on which you observe the problem, I and other people could try to help.

Here are some XSLT usage and performance tips from Michael Kay:

Eight tips for how to use XSLT efficiently:

  1. Keep the source documents small. If necessary split the document first.
  2. Keep the XSLT processor (and Java VM) loaded in memory between runs
  3. If you use the same stylesheet repeatedly, compile it first.
  4. If you use the same source document repeatedly, keep it in memory.
  5. If you perform the same transformation repeatedly, don't. Store the result instead.
  6. Keep the output document small. For example, if you're generating HTML, use CSS.
  7. Never validate the same source document more than once.
  8. Split complex transformations into several stages.

Eight tips for how to write efficient XSLT:

  1. Avoid repeated use of "//item".
  2. Don't evaluate the same node-set more than once; save it in a variable.
  3. Avoid <xsl:number> if you can. For example, by using position().
  4. Use <xsl:key>, for example to solve grouping problems.
  5. Avoid complex patterns in template rules. Instead, use <xsl:choose> within the rule.
  6. Be careful when using the preceding[-sibling] or following[-sibling] axes. This often indicates an algorithm with n-squared performance.
  7. Don't sort the same node-set more than once. If necessary, save it as a result tree fragment and access it using the node-set() extension function.
  8. To output the text value of a simpl
answered 2009-01-12T19:09:52.527

Your Answer