xsl-list
[Top] [All Lists]

RE: DOM or SAX input faster/more efficient?

2005-05-30 02:01:47
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(_at_)chaeron(_dot_)com] 
Sent: 30 May 2005 02:38
To: mike(_at_)saxonica(_dot_)com
Cc: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>