[
https://issues.apache.org/jira/browse/TRINIDAD-1805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12864792#action_12864792
]
Andrew Robinson commented on TRINIDAD-1805:
-------------------------------------------
I thought we were now caching client IDs so is this still necessary?
> UIXComponentBase ::invokeOnComponent should be optimized to avoid calls to
> getClientId
> --------------------------------------------------------------------------------------
>
> Key: TRINIDAD-1805
> URL: https://issues.apache.org/jira/browse/TRINIDAD-1805
> Project: MyFaces Trinidad
> Issue Type: Bug
> Components: Components
> Reporter: Stevan Malesevic
>
> UIXComponentBase ::invokeOnComponent is very expensive method and most of the
> cost comes from calls to getClientIds. The code can be optimized to avoid
> number of these calls
> 1. Before calling getClientId the code should do getId() and compare if
> passed in clientId ends with id
> 2. If this comp is naming container and its id is not part of passed in
> clientId then clientId is not under this container so skip
> invokeOnChildrenComponents
> So code might look like this
> @Override
> public boolean invokeOnComponent(
> FacesContext context,
> String clientId,
> ContextCallback callback)
> throws FacesException
> {
> boolean invokedComponent;
>
> // set up the context for visiting the children
> setupVisitingContext(context);
> try
> {
> //Check if pass in clientId ends with this id
> //If not there is no matching
> String id = this.getId();
>
> if (clientId.endsWith(id) && clientId.equals(getClientId(context)))
> {
> pushComponentToEL(context, null);
> try
> {
> // this is the component we want, so invoke the callback
> callback.invokeContextCallback(context, this);
> }
> finally
> {
> popComponentFromEL(context);
> }
> // we found the component
> invokedComponent = true;
> }
> else
> {
> //if this is naming container and passed in ClientId doesn't containe
> this id
> //then there can not be a match on chiled comps
> if ((this instanceof NamingContainer) && !(clientId.contains(id)))
> invokedComponent = false;
> else
> // set up the children visiting context to iterate through children.
> We inline this
> // code instead of calling super in order
> // to avoid making an extra call to getClientId().
> invokedComponent = invokeOnChildrenComponents(context, clientId,
> callback);
> }
> }
> finally
> {
> // teardown the context now that we have visited the component
> tearDownVisitingContext(context);
> }
> return invokedComponent;
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.