What is it best way to handle pagination/sorting and filtering? Server side or at the client side?
Numerous times in your projects you might have to face a situation where you need to pull chunks of data dynamically. The obvious issue that you then face is pagination\sorting and filtering. You then start to think if it would be better to handle it all at the server side or should hold back and handle it on the client side.
Well there is no clear winner amongst the two; neither there is a right or wrong approach.
The right answer depends on your priorities and the size of the data set to be paginated.
If you have large number of pages doing it on client side will make your user download all the data at first which might not be needed, and will defeat the primary benefit of pagination. In such a scenario you are better of requesting pages in chunks from the server via AJAX. So let the server do the pagination. You can also pre-fetch the next few pages the user will likely view to make the interface seem more responsive. However, when implementing it, you need to make sure that you're optimizing your SQL properly. For instance, I believe in MySQL, if you use the LIMIT option it doesn't use the index so you need to rewrite your SQL to use the index properly.
If there are only few pages, grabbing it all up-front and paginating on the client may be a better choice. That gives you the obvious benefit of faster subsequent page loads. Unless really required we should not choose the Server side pagination in such a case.
Server side pagination is better for:
- Large data set
- Faster initial page load
- Complex view business logic
- Resilience to concurrent changes
Client side pagination is better for:
- Small data set
- Faster subsequent page loads
- Sort & filter requirements supported fully (unless results greater than max size).
To sum up, if you're paginating for primarily cosmetic reasons, it makes more sense to handle it client side. And if you're paginating to reduce initial load time, server side is the obvious choice. Of course, client side's advantage on subsequent page load times diminishes if you utilize Ajax to load subsequent pages.
Also refer to http://nitinaggarwal.wordpress.com/
Comments\suggestions are welcome.