Hi,

yes, every List support indexes, but it dependes on implementation if
that index-based access is fast or not. For example, ArrayList is fast,
because it uses array internally; and also flags that with interface
java.util.RandomAccess

But LinkedList for example just iterates the list until it reaches the
index you specified - there is the dangerous problem.



Mike Kienenberger píše v Út 10. 05. 2011 v 16:17 -0400:
> If getChildren() is always of type List, then it really doesn't matter
> if it's ArrayList or ChildArrayList or some other kind of list.   You
> can use indexes for any type of List.
> 
> On Tue, May 10, 2011 at 4:11 PM, Martin Koci
> <martin.kocicak.k...@gmail.com> wrote:
> > Hi,
> >
> > in current codebase, myfaces use mostly enhanced loop for iterating over
> > chidren:
> >
> > for (UIComponent child: getChildren())
> >
> > that creates new instance of iterator.
> >
> > After change to plain old indices:
> >
> > for (i = 0; i < childCount; i++)
> >  child = getChildren().get(i);
> >
> > I achieved following results in my test case:
> >
> > 1) number of AbstractList$Itr from ~ 100 000 down to ~1500 instances per
> > one render/response
> >
> > 2) time for one render/response from ~1500ms down to ~900ms
> >
> > please see https://issues.apache.org/jira/browse/MYFACES-3130 for more
> > details.
> >
> > We know that getChildren() is type of ArrayList
> > (javax.faces.component._ComponentChildrenList) - in this situation is
> > index-based loop safe change.
> >
> > But custom component can override implementation of getChildren() and
> > provide own implementation which can be slower: I know about Trinidad:
> > uses ArrayList  too, so no risk here
> > (org.apache.myfaces.trinidad.component.ChildArrayList)
> >
> > I use RichFaces and PrimeFaces too and don't see custom implementation
> > of children in their codebase.
> >
> > What do you think about this problem? The performance gain is pretty big
> > but also risky.
> >
> >
> > Regards,
> >
> > Kočičák
> >
> >
> 


Reply via email to