When you are dealing with slow connections, the biggest bottleneck is transferring a large volume of data all at once. There are some techniques that can be used to increase the performance involving server-side cursors.
Here are two techniques worth considering:
- Create a cursor in a thread and download the first 25-50 records for display. Then while the user is thinking what to do, you are already fetching the second, third and forth set of 50 records. This significantly reduces the time the end-user needs to wait.
- The Objective-C Espresso API uses a technique where it creates a complete result set list, only most of the records are placeholders. If we access #300 on the list, it fetches 300-350 in the cursor. Once it is in memory, it is there if it is requested again. Each one of these fetches is instant because the search has already happened. To speed up the response for slower connections, use smaller record increments on the subsequent fetches.
We have a customer who used this technique with their application and it completely changed how their product performed over the internet. When they fetch 100,000 records they really only fetch what the user is realistically going to scroll through. Most of the time, end users do a more refined search anyway if they are looking for something down the list.
Here are some more resources on this topic:Video: Performance Optimization Techniques Video: OpenBase Cursors