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