Bart,
I believe it is much easier for the DataModel implementation to cache
getRowCount()
results than to change tr:table implementation. It also seems to be the
right (safer) thing to do
since the model knows exactly when the cached values should be
discarded. I also believe the table
should be calling isRowAvailable() even if the current index falls into
the range returned by getRowCount().
Regards,
Max Starets
[EMAIL PROTECTED] wrote:
Hi List,
I implemented my own DataModel for
backing
a tr:table. By adding logging to my DataModel, I discovered that the
table
seems to call the DataModel more often than necessary. Depending on how
"smart" the DataModel is, this can have a bad influence on the
performance. Is there a way to prevent those calls muyself? Or should I
consider this as a bug? To prove my point, I have a snippet of my log
file
pasted below.
I created these log entries as
follows:
- I have a data set with 95542
records.
- I've set the rows parameter of
tr:table
to 15 (so 15 rows per page)
It looks like the table is
implemented
with some sort of "triple check everything" philosophy. For instance
the getRowCount() is called three times. I think it should be enough to
call it once. But what really surprises me, is that a combination of
setRowIndex
and getRowIndex is called for every last row of a page. That is, every
last row of a page that appears in the drop down box. For pages that
are
hidden behind the "More..." option of the drop down, the methods
are not called. And why is the rowIndex reset to 2 every time? When the
first page is actually being filled with rows, the getRowCount is
called
once again. And for each row on a page, a isRowAvailable is called
twice,
and a getRowIndex even seven times! I know that neither of those are
expensive
calls. Fortunately the most expensive call (getRowData) is only called
once per row. But I still get the impression that it can be implemented
somewhat more efficient. Why is it neccesary to verify that a row
exists
before adding it to the drop down list? By calling getRowCount() the
table
should know that all rows between 0 and (in this case) 95541 does
exist,
isn't it?
ScrollableDataModel created
ScrollableDataModel.setRowIndex(-1)
called.
ScrollableDataModel.isRowAvailable()
called on row 0. Returning true
ScrollableDataModel.getRowIndex()
called
on row 1
ScrollableDataModel.getRowIndex()
called
on row 1
ScrollableDataModel.isRowAvailable()
called on row 1. Returning true
ScrollableDataModel.getRowIndex()
called
on row 1
ScrollableDataModel.setRowIndex(-1)
called.
ScrollableDataModel.isRowAvailable()
called on row 0. Returning true
ScrollableDataModel.getRowData()
called
on row 1
ScrollableDataModel.isRowAvailable()
called on row 1. Returning true
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.getRowCount()
returning
95542
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(14)
called.
ScrollableDataModel.isRowAvailable()
called on row 14. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowCount()
returning
95542
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.getRowCount()
returning
95542
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(0)
called.
ScrollableDataModel.isRowAvailable()
called on row 0. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(14)
called.
ScrollableDataModel.isRowAvailable()
called on row 14. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(29)
called.
ScrollableDataModel.isRowAvailable()
called on row 29. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(44)
called.
ScrollableDataModel.isRowAvailable()
called on row 44. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(59)
called.
ScrollableDataModel.isRowAvailable()
called on row 59. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(74)
called.
ScrollableDataModel.isRowAvailable()
called on row 74. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(89)
called.
ScrollableDataModel.isRowAvailable()
called on row 89. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(104)
called.
ScrollableDataModel.isRowAvailable()
called on row 104. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(119)
called.
ScrollableDataModel.isRowAvailable()
called on row 119. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(134)
called.
ScrollableDataModel.isRowAvailable()
called on row 134. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(149)
called.
ScrollableDataModel.isRowAvailable()
called on row 149. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(164)
called.
ScrollableDataModel.isRowAvailable()
called on row 164. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(179)
called.
ScrollableDataModel.isRowAvailable()
called on row 179. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(194)
called.
ScrollableDataModel.isRowAvailable()
called on row 194. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(209)
called.
ScrollableDataModel.isRowAvailable()
called on row 209. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(224)
called.
ScrollableDataModel.isRowAvailable()
called on row 224. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(239)
called.
ScrollableDataModel.isRowAvailable()
called on row 239. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(254)
called.
ScrollableDataModel.isRowAvailable()
called on row 254. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(269)
called.
ScrollableDataModel.isRowAvailable()
called on row 269. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(284)
called.
ScrollableDataModel.isRowAvailable()
called on row 284. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(299)
called.
ScrollableDataModel.isRowAvailable()
called on row 299. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(314)
called.
ScrollableDataModel.isRowAvailable()
called on row 314. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(329)
called.
ScrollableDataModel.isRowAvailable()
called on row 329. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(344)
called.
ScrollableDataModel.isRowAvailable()
called on row 344. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(359)
called.
ScrollableDataModel.isRowAvailable()
called on row 359. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(374)
called.
ScrollableDataModel.isRowAvailable()
called on row 374. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(389)
called.
ScrollableDataModel.isRowAvailable()
called on row 389. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(404)
called.
ScrollableDataModel.isRowAvailable()
called on row 404. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(419)
called.
ScrollableDataModel.isRowAvailable()
called on row 419. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(434)
called.
ScrollableDataModel.isRowAvailable()
called on row 434. Returning true
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.isRowAvailable()
called on row 2. Returning true
ScrollableDataModel.getRowData()
called
on row 3
ScrollableDataModel.isRowAvailable()
called on row 3. Returning true
ScrollableDataModel.getRowIndex()
called
on row 4
ScrollableDataModel.getRowCount()
returning
95542
ScrollableDataModel.getRowIndex()
called
on row 4
ScrollableDataModel.setRowIndex(14)
called.
ScrollableDataModel.isRowAvailable()
called on row 14. Returning true
ScrollableDataModel.setRowIndex(4)
called.
ScrollableDataModel.setRowIndex(0)
called.
ScrollableDataModel.isRowAvailable()
called on row 0. Returning true
ScrollableDataModel.getRowData()
called
on row 1
ScrollableDataModel.isRowAvailable()
called on row 1. Returning true
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.getRowIndex()
called
on row 2
ScrollableDataModel.setRowIndex(1)
called.
ScrollableDataModel.isRowAvailable()
called on row 1. Returning true
ScrollableDataModel.getRowData()
called
on row 2
ScrollableDataModel.isRowAvailable()
called on row 2. Returning true
ScrollableDataModel.getRowIndex()
called
on row 3
ScrollableDataModel.getRowIndex()
called
on row 3
ScrollableDataModel.getRowIndex()
called
on row 3
ScrollableDataModel.getRowIndex()
called
on row 3
ScrollableDataModel.getRowIndex()
called
on row 3
ScrollableDataModel.getRowIndex()
called
on row 3
ScrollableDataModel.getRowIndex()
called
on row 3
ScrollableDataModel.setRowIndex(2)
called.
ScrollableDataModel.isRowAvailable()
called on row 2. Returning true
ScrollableDataModel.getRowData()
called
on row 3
ScrollableDataModel.isRowAvailable()
called on row 3. Returning true
ScrollableDataModel.getRowIndex()
called
on row 4
ScrollableDataModel.getRowIndex()
called
on row 4
ScrollableDataModel.getRowIndex()
called
on row 4
ScrollableDataModel.getRowIndex()
called
on row 4
ScrollableDataModel.getRowIndex()
called
on row 4
ScrollableDataModel.getRowIndex()
called
on row 4
ScrollableDataModel.getRowIndex()
called
on row 4
ScrollableDataModel.setRowIndex(3)
called.
ScrollableDataModel.isRowAvailable()
called on row 3. Returning true
ScrollableDataModel.getRowData()
called
on row 4
ScrollableDataModel.isRowAvailable()
called on row 4. Returning true
ScrollableDataModel.getRowIndex()
called
on row 5
ScrollableDataModel.getRowIndex()
called
on row 5
ScrollableDataModel.getRowIndex()
called
on row 5
ScrollableDataModel.getRowIndex()
called
on row 5
ScrollableDataModel.getRowIndex()
called
on row 5
ScrollableDataModel.getRowIndex()
called
on row 5
ScrollableDataModel.getRowIndex()
called
on row 5
ScrollableDataModel.setRowIndex(4)
called.
ScrollableDataModel.isRowAvailable()
called on row 4. Returning true
ScrollableDataModel.getRowData()
called
on row 5
ScrollableDataModel.isRowAvailable()
called on row 5. Returning true
ScrollableDataModel.getRowIndex()
called
on row 6
ScrollableDataModel.getRowIndex()
called
on row 6
ScrollableDataModel.getRowIndex()
called
on row 6
ScrollableDataModel.getRowIndex()
called
on row 6
ScrollableDataModel.getRowIndex()
called
on row 6
ScrollableDataModel.getRowIndex()
called
on row 6
ScrollableDataModel.getRowIndex()
called
on row 6
ScrollableDataModel.setRowIndex(5)
called.
ScrollableDataModel.isRowAvailable()
called on row 5. Returning true
ScrollableDataModel.getRowData()
called
on row 6
ScrollableDataModel.isRowAvailable()
called on row 6. Returning true
ScrollableDataModel.getRowIndex()
called
on row 7
ScrollableDataModel.getRowIndex()
called
on row 7
ScrollableDataModel.getRowIndex()
called
on row 7
ScrollableDataModel.getRowIndex()
called
on row 7
ScrollableDataModel.getRowIndex()
called
on row 7
ScrollableDataModel.getRowIndex()
called
on row 7
ScrollableDataModel.getRowIndex()
called
on row 7
ScrollableDataModel.setRowIndex(6)
called.
ScrollableDataModel.isRowAvailable()
called on row 6. Returning true
ScrollableDataModel.getRowData()
called
on row 7
ScrollableDataModel.isRowAvailable()
called on row 7. Returning true
ScrollableDataModel.getRowIndex()
called
on row 8
ScrollableDataModel.getRowIndex()
called
on row 8
ScrollableDataModel.getRowIndex()
called
on row 8
ScrollableDataModel.getRowIndex()
called
on row 8
ScrollableDataModel.getRowIndex()
called
on row 8
ScrollableDataModel.getRowIndex()
called
on row 8
ScrollableDataModel.getRowIndex()
called
on row 8
ScrollableDataModel.setRowIndex(7)
called.
ScrollableDataModel.isRowAvailable()
called on row 7. Returning true
ScrollableDataModel.getRowData()
called
on row 8
ScrollableDataModel.isRowAvailable()
called on row 8. Returning true
ScrollableDataModel.getRowIndex()
called
on row 9
ScrollableDataModel.getRowIndex()
called
on row 9
ScrollableDataModel.getRowIndex()
called
on row 9
ScrollableDataModel.getRowIndex()
called
on row 9
ScrollableDataModel.getRowIndex()
called
on row 9
ScrollableDataModel.getRowIndex()
called
on row 9
ScrollableDataModel.getRowIndex()
called
on row 9
ScrollableDataModel.setRowIndex(8)
called.
ScrollableDataModel.isRowAvailable()
called on row 8. Returning true
ScrollableDataModel.getRowData()
called
on row 9
ScrollableDataModel.isRowAvailable()
called on row 9. Returning true
ScrollableDataModel.getRowIndex()
called
on row 10
ScrollableDataModel.getRowIndex()
called
on row 10
ScrollableDataModel.getRowIndex()
called
on row 10
ScrollableDataModel.getRowIndex()
called
on row 10
ScrollableDataModel.getRowIndex()
called
on row 10
ScrollableDataModel.getRowIndex()
called
on row 10
ScrollableDataModel.getRowIndex()
called
on row 10
ScrollableDataModel.setRowIndex(9)
called.
ScrollableDataModel.isRowAvailable()
called on row 9. Returning true
ScrollableDataModel.getRowData()
called
on row 10
ScrollableDataModel.isRowAvailable()
called on row 10. Returning true
ScrollableDataModel.getRowIndex()
called
on row 11
ScrollableDataModel.getRowIndex()
called
on row 11
ScrollableDataModel.getRowIndex()
called
on row 11
ScrollableDataModel.getRowIndex()
called
on row 11
ScrollableDataModel.getRowIndex()
called
on row 11
ScrollableDataModel.getRowIndex()
called
on row 11
ScrollableDataModel.getRowIndex()
called
on row 11
ScrollableDataModel.setRowIndex(10)
called.
ScrollableDataModel.isRowAvailable()
called on row 10. Returning true
ScrollableDataModel.getRowData()
called
on row 11
ScrollableDataModel.isRowAvailable()
called on row 11. Returning true
ScrollableDataModel.getRowIndex()
called
on row 12
ScrollableDataModel.getRowIndex()
called
on row 12
ScrollableDataModel.getRowIndex()
called
on row 12
ScrollableDataModel.getRowIndex()
called
on row 12
ScrollableDataModel.getRowIndex()
called
on row 12
ScrollableDataModel.getRowIndex()
called
on row 12
ScrollableDataModel.getRowIndex()
called
on row 12
ScrollableDataModel.setRowIndex(11)
called.
ScrollableDataModel.isRowAvailable()
called on row 11. Returning true
ScrollableDataModel.getRowData()
called
on row 12
ScrollableDataModel.isRowAvailable()
called on row 12. Returning true
ScrollableDataModel.getRowIndex()
called
on row 13
ScrollableDataModel.getRowIndex()
called
on row 13
ScrollableDataModel.getRowIndex()
called
on row 13
ScrollableDataModel.getRowIndex()
called
on row 13
ScrollableDataModel.getRowIndex()
called
on row 13
ScrollableDataModel.getRowIndex()
called
on row 13
ScrollableDataModel.getRowIndex()
called
on row 13
ScrollableDataModel.setRowIndex(12)
called.
ScrollableDataModel.isRowAvailable()
called on row 12. Returning true
ScrollableDataModel.getRowData()
called
on row 13
ScrollableDataModel.isRowAvailable()
called on row 13. Returning true
ScrollableDataModel.getRowIndex()
called
on row 14
ScrollableDataModel.getRowIndex()
called
on row 14
ScrollableDataModel.getRowIndex()
called
on row 14
ScrollableDataModel.getRowIndex()
called
on row 14
ScrollableDataModel.getRowIndex()
called
on row 14
ScrollableDataModel.getRowIndex()
called
on row 14
ScrollableDataModel.getRowIndex()
called
on row 14
ScrollableDataModel.setRowIndex(13)
called.
ScrollableDataModel.isRowAvailable()
called on row 13. Returning true
ScrollableDataModel.getRowData()
called
on row 14
ScrollableDataModel.isRowAvailable()
called on row 14. Returning true
ScrollableDataModel.getRowIndex()
called
on row 15
ScrollableDataModel.getRowIndex()
called
on row 15
ScrollableDataModel.getRowIndex()
called
on row 15
ScrollableDataModel.getRowIndex()
called
on row 15
ScrollableDataModel.getRowIndex()
called
on row 15
ScrollableDataModel.getRowIndex()
called
on row 15
ScrollableDataModel.getRowIndex()
called
on row 15
ScrollableDataModel.setRowIndex(14)
called.
ScrollableDataModel.isRowAvailable()
called on row 14. Returning true
ScrollableDataModel.getRowData()
called
on row 15
ScrollableDataModel.isRowAvailable()
called on row 15. Returning true
ScrollableDataModel.getRowIndex()
called
on row 16
ScrollableDataModel.getRowIndex()
called
on row 16
ScrollableDataModel.getRowIndex()
called
on row 16
ScrollableDataModel.getRowIndex()
called
on row 16
ScrollableDataModel.getRowIndex()
called
on row 16
ScrollableDataModel.getRowIndex()
called
on row 16
ScrollableDataModel.getRowIndex()
called
on row 16
ScrollableDataModel.setRowIndex(4)
called.
ScrollableDataModel.isRowAvailable()
called on row 4. Returning true
ScrollableDataModel.getRowData()
called
on row 5
ScrollableDataModel.isRowAvailable()
called on row 5. Returning true
ScrollableDataModel.getRowIndex()
called
on row 6
ScrollableDataModel.setRowIndex(1)
called.
ScrollableDataModel.isRowAvailable()
called on row 1. Returning true
ScrollableDataModel.getRowData()
called
on row 2
ScrollableDataModel.isRowAvailable()
called on row 2. Returning true
ScrollableDataModel.getRowIndex()
called
on row 3
ScrollableDataModel.setRowIndex(6)
called.
ScrollableDataModel.isRowAvailable()
called on row 6. Returning true
ScrollableDataModel.getRowData()
called
on row 7
ScrollableDataModel.isRowAvailable()
called on row 7. Returning true
ScrollableDataModel.getRowIndex()
called
on row 8
Best regards,
Bart Kummel
|