Why Does "Load More" Feel Slow? Optimize It with Keyset Pagination

Shreyans Padmani - Feb 22 - - Dev Community

If your website uses a "Load More" button to show more items, you might notice it gets slower over time. This happens because the traditional way of loading more data isn't very efficient. Let's explore a better way to do it: Keyset Pagination.

Why Traditional Pagination is Slow

Many developers use OFFSET-based queries to load more data. Here’s an example:

SELECT * FROM products ORDER BY created_at DESC OFFSET 500 LIMIT 20;
Enter fullscreen mode Exit fullscreen mode

This method has some big problems:

Slow performance: The database has to scan and skip a lot of rows before getting the next set.

Inconsistent data: If items are added or deleted, users may see duplicates or missing items.

The Better Solution: Keyset Pagination

Keyset pagination (also called cursor-based pagination) fixes these issues. Instead of skipping rows, it remembers the last item and uses it to get the next batch.

Example of Keyset Pagination

SELECT * FROM products WHERE created_at < '2024-02-22 10:00:00' ORDER BY created_at DESC LIMIT 20;
Enter fullscreen mode Exit fullscreen mode

Why Keyset Pagination is Better

✅ Faster queries: The database doesn’t have to scan skipped rows.
✅ No missing or duplicate data: It loads records based on the last seen item.
✅ Great for infinite scrolling: Works smoothly for social media feeds, chat apps, and product listings.

When to Use Keyset Pagination

This method is best for:

Social media feeds (Twitter, Facebook, LinkedIn)

Online stores (product lists)

Messaging apps

Transaction history

Downsides of Keyset Pagination

⚠ Needs an indexed column (like an ID or timestamp)
⚠ Not useful for jumping to specific pages (like "Go to Page 10")

Final Thoughts

If your app uses infinite scrolling or deals with large amounts of data, keyset pagination is a smarter choice than OFFSET-based pagination. It’s faster, more reliable, and ensures a smooth experience for users.

Would you consider using keyset pagination in your projects? Let’s discuss in the comments!

. . . .