You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org> on 2011/08/02 02:06:27 UTC
[jira] [Resolved] (MYFACES-3237) [PERF] Renderers for components
like h:outputText and others do many unecessary getAttributes().get() calls
[ 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