On Sun, 28 Apr 2002 00:46:53 -0400, "Dmitri Plotnikov" <[EMAIL PROTECTED]> wrote:
> Ovidiu,
>
> I have added to JXPath the explicit caching you proposed in your earlier
> submission:
This is great, thank you!
> > > > > I've got a small suggestion for an optimization, if
> > > > > you don't mind. In
> > > > > the implementation I have, 0.1-dev from Jakarta's
> > > > > CVS, I noticed
> > > > > there's no way to compile an XPath, before using it.
> > > > > Having a way to
> > > > > compile the XPaths to be used later, would
> > > > > considerably improve the
> > > > > performance in repeated operations.
> > > > >
> > > > > E.g. right now you have something like this:
> > > > >
> > > > > Object bean = ...;
> > > > > JPathContext context =
> > > > > JPathContext.newContext(bean);
> > > > > context.getValue("some XPath");
> > > > >
> > > > > I'd like to also have the ability to do:
> > > > >
> > > > > Object bean = ...;
> > > > > JPathContext context =
> > > > > JPathContext.newContext(bean);
> > > > > XPathObject xpath = new XPathObject("some XPath");
> > > > > context.getValue(xpath);
> > > > >
> > > > > With this approach, I can setup a dictionary of
> > > > > already compiled XPath
> > > > > expressions, and use compiled XPaths, instead of
> > > > > having Xalan
> > > > > interpret the XPath all the time.
> > > > >
> > > > > Last time I checked, Xalan did have the ability to
> > > > > precompile XPaths
> > > > > in its internal format, so maybe this is easy to
> > > > > achieve.
> > > > Actually JXPath is already doing something like that
> > > > transparently to you. It maintains a static soft cache
> > > > of parse trees (which are that internal representation
> > > > you are talking about). The reason I am using soft
> > > > cache as opposed to a regular map is that some
> > > > applications will generate XPaths dynamically, in
> > > > which case the size of the cache has a chance of going
> > > > through the roof. The soft cache is cleared by
> > > > garbage collector, which removes the possibility of
> > > > running out of memory.
> > > >
> > > > I have been thinking about improving that mechanism a
> > > > little bit. I now want to have a regular map of a
> > > > limited size in addition to the soft cache.
> > > > Everything that spills over the hard cache will still
> > > > be stored in the soft cache. I think that will cover
> > > > the 90% case.
>
> I now see the need for caching external to JXPath: you may want to
> precompile some expression at application start time, you may want to check
> syntax before you use an expression etc.
Yes, this is right. I essentially want to precompile XPath expressions
in the hope I can eliminate the XPath compilation each time.
> I called "XPathObject" "CompiledExpression". You make an explicit call:
> context.compile(xpath) to get a CompiledExpression. That method will in
> fact check the internal cache before it proceeds with the compilation.
OK, this is good, it's exactly what I was looking for!
> Thanks again for the suggestion,
Sure, anytime ;-)
Thanks for the quick turnaround!
Best regards,
--
Ovidiu Predescu <[EMAIL PROTECTED]>
http://www.geocities.com/SiliconValley/Monitor/7464/ (GNU, Emacs, other stuff)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]