Andrew, Thanks for an exhaustive description.
What I've considered is the following behavior:
- Both vertical and horizontal scrollbars are enabled.
- Only the current viewport is loaded from the server (this includes the background cells - they can't be always calculated on the client before BeforeCellRender has to be taken into account - and the events).
- When you scroll in any direction, it starts loading the data from the server. Advance background loading is a nice idea but it would come in the next step.
- The resources list is loaded in advance (in order to determine the scroll range).
This will have many advantages:
- It will allow to show many more resources (the missing vertical scrollbar is a big limitation now).
- It will allow to show almost unlimited time range (it really doesn't matter how many events you have since you are only loading a fraction of the total number).
There is only one big issue at the moment and that's the dynamic row height. The current behavior is that the row height is calculated as EventHeight * MaximumConcurrentEventNumberForThisRow.
- When you load only a part of the row you won't know the right maximum.
- When you realize that the row height needs to be increased it will need to stretch the row height. This will might be disturbing (especially when it happen while scrolling).
- One of the solutions would be loading all row at once. This would work but it wouldn't help much for long time range scenarios.
- I would also like to cache the events and background for the already visited coordinates. This would be also difficult for a row that changes its height during scrolling.
It will require some testing on what's the best performing solution. The scalability has a higher priority than scrolling speed so I will rather give up caching for some cases rather then loading the full row at once.