[ 
https://issues.apache.org/jira/browse/MYFACES-3144?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13051172#comment-13051172
 ] 

Leonardo Uribe commented on MYFACES-3144:
-----------------------------------------

I think there is one alternative to do this. To retrieve a renderer we need 
three params:

1. renderKitId
2. family
3. rendererType

family and rendererType does not change, but renderKitId could change. So, why 
don't save on a transient field the latest renderKitId used to derive the 
renderer? Then, when getRenderer() is called we just compare that field against 
the current one and if are equals we can return the cached instance, otherwise 
recalculate it. 

But anyway it is questionable if we can gain something with this strategy, 
because in practice we replace a simple comparison between two strings + an 
additional field on every component against two lookups over a map. At first 
view, let the code "as is" looks good, so only if we can gain something it is 
worth to do it.

> [PERF] Cache renderer in UIComponentBase
> ----------------------------------------
>
>                 Key: MYFACES-3144
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3144
>             Project: MyFaces Core
>          Issue Type: New Feature
>          Components: General
>    Affects Versions: 2.1.0-SNAPSHOT
>         Environment: myfaces core trunk
>            Reporter: Martin Kočí
>            Assignee: Martin Kočí
>         Attachments: MYFACES-3144.patch
>
>
> UIComponentBase uses getRenderer(): Renderer in five methods:
> 1) decode
> 2) encodeBegin
> 3) encodeChildren
> 4) encodeEnd
> 50 getClientId
> getting the renderer is not cheap if you have thousands component in view. 
> Cache renderer instance in UIComponentBase (Trinidad UIXComponentBase does it 
> already)

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


Reply via email to