From: Fabian Lange Date: Wed, 21 May 2014 12:52:52 +0000 (+0200) Subject: Optimize getAllChildrenIterable() performance. (#13803) X-Git-Tag: 7.2.1~6 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=01f0c0464196bdafff6a9498945885fa8ef6c4c8;p=vaadin-framework.git Optimize getAllChildrenIterable() performance. (#13803) getAllChildrenIterable() is invoked frequently, its used by attach/detach and markAsDirty. Because of the implementation detail in CombinedIterator, on every call all iterators are checked. This means that on every component which has multiple childs, each next() call will first check the extension iterator, before advancing in the child iterator. By having the childs first, this overhead is reduced. If no extensions are existing (which is quite common) the iterator is not added at all. (creating an iterator on an empty UnmodifiableCollection is waste of time and memory) Change-Id: I23bb91464052ad4282963ec4b5be8a52c6847d4f --- diff --git a/server/src/com/vaadin/server/AbstractClientConnector.java b/server/src/com/vaadin/server/AbstractClientConnector.java index 1e58fb30c0..92c235167c 100644 --- a/server/src/com/vaadin/server/AbstractClientConnector.java +++ b/server/src/com/vaadin/server/AbstractClientConnector.java @@ -348,13 +348,16 @@ public abstract class AbstractClientConnector implements ClientConnector, @Override public Iterator iterator() { CombinedIterator iterator = new CombinedIterator(); - iterator.addIterator(connector.getExtensions().iterator()); if (connector instanceof HasComponents) { HasComponents hasComponents = (HasComponents) connector; iterator.addIterator(hasComponents.iterator()); } + Collection extensions = connector.getExtensions(); + if (extensions.size() > 0) { + iterator.addIterator(extensions.iterator()); + } return iterator; } }