[xsl] RE: DOM or SAX input faster/more efficient?

Subject: [xsl] RE: DOM or SAX input faster/more efficient?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 30 May 2005 10:01:47 +0100
It depends very much on what the transformation is actually doing. Firstly,
a JDOM tree will occupy more memory than one built by Saxon: my guess is
that an element node in JDOM will take about 60 bytes compared with 20 in
the Saxon tinytree. Secondly, some operations will be more expensive.
Testing whether an element matches a simple name test will involve two
string comparisons, rather than a single integer comparison. Sorting nodes
into document order is likely to be much slower in JDOM than with the Saxon
tree, because comparing the position of two nodes involves searching upwards
to find a common ancestor and then searching siblings - in a flat document
where the outermost element contains 20000 children the difference will be
dramatic. However, the devil's in the detail: Saxon will sometimes be able
to avoid these costs depending on the exact access paths used in the
stylesheet.

The only real answer I can give is: measure it.

By the way, I would expect JDOM to be more efficient than DOM, but again you
would have to measure it to be sure.

For simple transformations the cost of building the tree often dominates the
cost of the transformation, so if you already have a tree, it's probably
better to supply that rather than letting Saxon rebuild it. For more complex
transformations this may not be the best strategy.

Michael Kay
http://www.saxonica.com/ 

> -----Original Message-----
> From: Andrzej Jan Taramina [mailto:andrzej@xxxxxxxxxxx] 
> Sent: 30 May 2005 02:38
> To: mike@xxxxxxxxxxxx
> Cc: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: DOM or SAX input faster/more efficient?
> 
> Michael:
> 
> > If the input comes from source XML, let the XSLT processor 
> build the tree
> > (i.e., supply a SAX or Stream source) rather than doing the 
> job yourself. The
> > XSLT processor will usually be able to build a far more 
> efficient internal
> > tree structure. Only supply a DOM source if your 
> application is constructing
> > the source tree programmatically (and even then, use SAX if 
> you can).
> 
> Any rough idea on how much more efficient it might be to 
> supply SAX events 
> rather than a DOM tree as input to XSLT?  Is it 10%...50%, an 
> order or 
> magnitude?  
> 
> Just trying to get a feel for what the performance difference 
> might be.
> 
> Currently, we're passing in a JDOM document.  It's pretty 
> easy to build that 
> since it's used in the presentation layer of a large system, 
> using STXX 
> (Struts interface for XSLT), where the beans/data returned by the 
> business/services tier are serialized into the JDOM document. 
>  Doesn't look 
> like there is much overhead in producing the JDOM document 
> from the beans, so 
> the real difference, if any, will be in how efficient XSLT is 
> with JDOM 
> versus SAX inputs.
> 
> Thanks!
> 
> 
> Andrzej Jan Taramina
> Chaeron Corporation: Enterprise System Solutions
> http://www.chaeron.com

Current Thread