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

Leonardo Uribe resolved MYFACES-3237.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.1.2
                   2.0.8
         Assignee: Leonardo Uribe

The patch commited only was applied to the most important cases. It is still 
possible to add it to components like h:selectXXX, but for now it is ok. The 
idea was just create a class CommonPropertyConstants and some methods that can 
be called modifying the default template for create components. A new method 
was added on HtmlRenderer called isCommonPropertiesOptimizationEnabled() to 
enable/disable the optimization only to default renderers.

> [PERF] Renderers for components like h:outputText and others do many 
> unecessary getAttributes().get() calls
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-3237
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3237
>             Project: MyFaces Core
>          Issue Type: Improvement
>          Components: JSR-314
>            Reporter: Leonardo Uribe
>            Assignee: Leonardo Uribe
>             Fix For: 2.0.8, 2.1.2
>
>
> Doing some performance tests with Gerhard, we notice renderers like the one 
> used for h:outputText does a lot of calls to getAttributes().get().
> The problem is most of this calls just return null, wasting time and 
> resources. For example, usually h:outputText uses value, style and 
> styleClass. Think about the most basic use case where you need to show some 
> data with just h:dataTable and h:outputText. Per each h:outputText, 6 calls 
> to getAttributes().get() for passthrough attributes, most of them completely 
> unnecessary. The same is true for other components.
> We can reduce the number of calls if we have something that keep track of the 
> properties already set. Obviously this will be a myfaces internal, but I 
> think it is worth to do it at least for the most used components like 
> h:outputText, h:outputLabel, h:outputFormat, h:outputScript and 
> h:outputStylesheet. Note do this can make renderers harder to maintain, 
> because some extra code should be added.
> We already have some interfaces in javax.faces.component.html package like
>     _StyleProperties
>     _UniversalProperties
>     _TitleProperty
>     _EscapeProperty
>     _DisabledClassEnabledClassProperties
>     _DisabledReadonlyProperties
>     _AccesskeyProperty
>     _AltProperty
>     _ChangeSelectProperties
>     _EventProperties
>     _FocusBlurProperties
>     _LabelProperty
>     _LinkProperties
>     _MessageProperties
>     _TabindexProperty
> The idea could be focus only on these set of properties, and let the others 
> as is.
> Long time ago, when I reviewed trinidad code for implement MyFaces Core 
> Partial State Saving, I notice the class 
> org.apache.myfaces.trinidad.bean.PropertyKey has an algorithm that assign a 
> number to each property. Maybe we can assign a number to each property and 
> store a flag on attribute map when it is set, and then retrieve this value 
> from the renderer and only check the ones that needs to be rendered.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to