[jdom-interest] Re: Factories

Elliotte Rusty Harold elharo at metalab.unc.edu
Mon Mar 1 08:14:07 PST 2004

At 4:13 PM +0100 3/1/04, phil at triloggroup.com wrote:
>>>The cost of all inn-memory manipulation is trivial compared to the 
>>>cost of input and output (including parsing and serialization)<<<
The tests I sent to Jason this week end show that SAXBuilder is about 
25% faster with the uncheckedFactory. The bigger the document is, the 
higher the gain is (up to 40% for a middle sized document).

We're not talking about using it with a builder. That's fine because 
the parser is already checking well-formedness, and there's no need 
to duplicate the checks. The question is whether this should be 
available to create elements that have not been parsed.

For our own purposes, building an HTML DOM is ~300% faster with the 
factory (4 times faster!). Obviously, these numbers justify the use 
of the factory, especially when serving HTML pages on a web server.

Actually no, they don't. I suspect the real bottleneck on this system 
is not anywhere near the JDOM construction. A 300% speed-up in a part 
of the code that takes 0.1% of the time is irrelevant. I'd be very 
surprised in the bottleneck in the web app weren't somewhere else 
like network latency or database access. And even if it were in JDOM, 
there might be some way to create the documents that doesn't require 
an UnverifiedFactory.. Off the top of my head I can think of two. 
Prebuild most of the document, either clone or serialize and 
unserialize it, and then just make the modifications required for 
each request.

>>>There's simply no point to optimizing the speed of object creation 
>>>and manipulation<<<
Well, the numbers above contradict this assertion.

>>>It's certainly not worth doing at the cost of correctness<<
The code which uses this facility should effectively ensure the 
correctness by itself. For example, when you're deserializing an XMLS 
stream you encoded yourself, you're sure of the document validity and 
do not need any validation overhead.

Maybe you and the programmers you hire are that good. Personally I'm 
not, and I've never met anybody who is.

About making it private, I'm sure it can be used by other builders, 
beyond SAXBuilder. XMLS builder is an example, but why not a pull 
parser builder or other kind of builders? A factory should be public, 
and accessible by external code.

A StAX builder might be a reasonable project for a JDOM 1.1 if and 
when StAX seems significantly better than SAX. However this is all 
hypothetical. There are currently no non-SAX XML parsers written in 
Java which could reasonably be used for general purpose building.


   Elliotte Rusty Harold
   elharo at metalab.unc.edu
   Effective XML (Addison-Wesley, 2003)

More information about the jdom-interest mailing list