Hi,
On Wed, Jul 27, 2016 at 11:24 PM, Janos Cserep <[email protected]> wrote: > Hi, > > I noticed a possible inefficiency in AbstractPageableView's > getItemModels() method: > > /** > * This method retrieves the subset of models for items in the current > page and allows > * RefreshingView to generate items. > * > * @return iterator over models for items in the current page > */ > @Override > protected Iterator<IModel<T>> getItemModels() > { > long offset = getFirstItemOffset(); > long size = getViewSize(); > > Iterator<IModel<T>> models = getItemModels(offset, size); > > models = new CappedIteratorAdapter<T>(models, size); > > return models; > } > > The getViewSize() method will issue a getRowCount() call which in > DataViewBase will call the size() method of the DataProvider: > > public long getViewSize() > { > return Math.min(getItemsPerPage(), getRowCount() - > getFirstItemOffset()); > } > > As far as I can see, this happens so that the call to > getItemModels(offset, size) would not ask for more items, than there is in > the underlying provider. > > However, ListDataProvider defends against getting more items than present > in the list: > > > @Override > public Iterator<T> iterator(final long first, final long count) > { > List<T> list = getData(); > > long toIndex = first + count; > if (toIndex > list.size()) > { > toIndex = list.size(); > } > return list.subList((int)first, (int)toIndex).listIterator(); > } > > Also databases can handle a LIMIT clause that asks for more rows than > present in the dataset. > > The reason I was looking at this code is a DataView element I'm using on > the front page of a public web application that fetches and displays the N > most recent entries from a comment table without any paging components > added to the DataView and I was seeing a simple "SELECT count(id) FROM > comment"-like query taking 9% of all sql time according to JavaMelody for > the last few days. > > I've changed the implementation by overriding the getItemModels() method > to call directly getItemsPerPage instead of getViewSize and it got rid of > the count selects and everything else seems to be working fine. > > I'm wondering if there is maybe some other reason why getItemModels() is > calling getViewSize instead of getItemsPerPage that I've missed. If not > should I create a ticket in jira? > Please file a ticket! We have to take a deeper look. Thank you! > > Thanks, > > Janos > > -- > pilar.hu > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
