Hi,

I'm investigating some time to improve the performance of my application
at the moment. My focus is due to reduction of CPU usage. I noticed that
the method isRendered() of every UICompoment is called 3 times in the
RenderResponse phase (MyFaces 1.2.8). This means 3 executions of the
expensive ELExpressions. My question is, why not to call setRenderd() on
the UIComponent after the first execution?

In org.apache.myfaces.shared_impl.renderkit.RendererUtils class I
changed the Method renderChildren() as followed:

public static void renderChildren(FacesContext facesContext, 
                                            UIComponent component)
throws IOException
{
  if (component.getChildCount() > 0) {
    for (Iterator it = component.getChildren().iterator();
it.hasNext();) {
      UIComponent child = (UIComponent)it.next();
                
      Boolean rendered = true;
      ValueExpression ve = child.getValueExpression("rendered");
      if (ve != null) {
        rendered =  
          (Boolean)ve.getValue(FacesContext.getCurrentInstance()
                 .getELContext());
      }
                
      child.setRendered(rendered); 
      renderChild(facesContext, child);
    }
  }
}
 
May a side effect be expected by this change?

Regards,
Wahid 

Reply via email to