[ 
https://issues.apache.org/jira/browse/TRINIDAD-1668?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Blake Sullivan updated TRINIDAD-1668:
-------------------------------------

    Status: Patch Available  (was: Open)

> Speed up UIXComponent.getId()
> -----------------------------
>
>                 Key: TRINIDAD-1668
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-1668
>             Project: MyFaces Trinidad
>          Issue Type: Improvement
>    Affects Versions:  1.2.12-plugins 
>         Environment: All
>            Reporter: Blake Sullivan
>         Attachments: JIRA_1668_1_2_12_2.patch
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> UIComponent.getId() is by far the most requested component attribute.  There 
> are a number of reasons for this:
> 1) The JSF RI has an issue in the JSP-JSF integration which causes getId() to 
> be called n^2 times where n is the number of children a component has
> 2) getClientId() calls getId()
> 3) FindComponent calls getId()
> 4) The tree visiting code trades off calls to getClientId() for calls to 
> getId()
> FacesBean optimizes attribute Map access at the expense of access directly 
> through the component.  The the extent that Renderers are Components are 
> accessing the attributes through the attribute Map, this is fine, however 
> even the Renderers access attributes common to all UIComponents such as id() 
> through the component directly.  Considering the huge number of times that 
> the the id is accessed (for some renders, this was 8% of the rendering time), 
> it makes sense to optimize this path.
> The proposal is to:
> 1) Store the id an an instance variable on the UIXComponent
> 2) Add a new capability flag to PropertyKey indicating that the property is 
> actually stored elsewhere using a ValueExpression will be stored as the 
> property's value in the PropertyMap.  For access through the FacesBean, the 
> ValueExpression will be evaluated to get/set the actual value
> 3) For state saving the ValueExpression is used to retrieve the actual value 
> and for state restoration the ValueExpression (which has been rebootstrapped 
> by the UIXComponent) is used to write the value back
> 4) Instead of setting the id attribute in the FacesBean, UIXComponent stores 
> it locally and sets an ValueExpression implementation into the FacesBean that 
> retrieves the value from the UIXComponent
> API Changes:
> PropertyKey:
> add
>   /**
>    * Capability indicating that values for this property should be
>    * be stored and retrieved through a ValueExpression rather than on the
>    * FacesBean itself
>    */
>   static public final int CAP_VALUE_EXPRESSION_IMPLEMENTATION = 16;
>   /**
>    * Returns <code>true</code> if property values for this key are set and get
>    * using a ValueExpression rather than storing the value in the FacesBean.
>    * @return <code>true</code> if properties values for this key are retrieved
>    * with a ValueExpression.
>    */
>   public boolean usesValueExpressionAsImplementation()
> After this change id retrieval doesn't make the 1% YourKit profiler hot spot 
> cut off

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to