You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "Ludger Bünger (JIRA)" <xe...@xml.apache.org> on 2010/03/11 14:28:27 UTC
[jira] Updated: (XERCESJ-1424) ElementImpl.getBaseURI has
unnecessary long execution time if the depth of the node to the document
root is longer
[ https://issues.apache.org/jira/browse/XERCESJ-1424?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ludger Bünger updated XERCESJ-1424:
-----------------------------------
Attachment: getBaseURIvalidationPerformancePatch.txt
> ElementImpl.getBaseURI has unnecessary long execution time if the depth of the node to the document root is longer
> ------------------------------------------------------------------------------------------------------------------
>
> Key: XERCESJ-1424
> URL: https://issues.apache.org/jira/browse/XERCESJ-1424
> Project: Xerces2-J
> Issue Type: Improvement
> Components: DOM (Level 3 Core)
> Affects Versions: 2.9.1
> Reporter: Ludger Bünger
> Priority: Minor
> Attachments: getBaseURIvalidationPerformancePatch.txt
>
>
> When calling getBaseURI upon an ElementImpl, an overproportionally long amount of time (~90% for my specific setup) is spent inside constructor calls of Xerces' URI class.
> Most of the time inside URI construction is spent for URI validation (which is necessary).
> getBaseURI works as follows:
> 1) if a xml base attribute is given:
> a) validate the correctness of this base URI by constructing an instance of URI
> b) and return it's toString() value.
> 2) if no xml base attribute is given (the most common case):
> a) retrieve the base uri (using a recursive call to getBaseURI) from my parent (more precise: my owner node),
> b) validate the correctness of this base URI by constructing an instance of URI
> c) and return it's toString() value.
> As we can see, each call to to ownerNode.getBaseURI does an URI verification.
> Since this method is called recursively upon an element's parent, this is done once per recursion level of the given element if the base uri has been set upon the document root and thus unnecessary often.
> So step 2b) is a hotspot and completely unnecessary since we can be sure that the base uri already retrieved from another node has been already validated.
> This is also documented inside the ElementImpl.getBaseURI sources:
> Quote from source:
> catch (org.apache.xerces.util.URI.MalformedURIException ex) {
> // This should never happen: parent should have checked the URI and returned null if invalid.
> return null;
> }
> So the performance fix is easy:
> remove validation of a parent's baseURI.
> See attached patch.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org