🚀 Oferta especial: 60% OFF no CrazyStack - Últimas vagas!Garantir vaga →
Backend

Cursor-Based Pagination vs Offset: Quando usar cada uma?

Descubra, de forma prática, as diferenças e limitações entre cursor-based pagination e offset-based pagination e saiba quando escolher cada abordagem.

CrazyStack
12 min de leitura
PaginaçãoAPIsBanco de DadosPerformance

Por que isso é importante

Entender corretamente as diferenças entre os métodos de paginação é fundamental para garantir performance, escalabilidade e boa experiência do usuário em aplicações que listam grandes volumas de dados. Escolher a abordagem errada pode limitar seu produto, dificultar navegação ou causar gargalos no banco de dados.

O que é Offset-Based Pagination?

A paginação baseada em offset funciona definindo um número fixo de itens por página (ex: 20 resultados) e uma lógica que “pula” um número de registros para atingir exatamente a página desejada. Por exemplo, para acessar a página 5 de 20 resultados, o sistema ignora os primeiros 80 registros e traz os próximos 20.

ℹ️Atenção

O offset no banco de dados exige leitura sequencial dos registros, o que pode causar lentidão em grandes volumes de dados.

O que é Cursor-Based Pagination?

A paginação baseada em cursor utiliza um marcador ("cursor") que aponta para o último elemento retornado anteriormente. Dessa forma, para buscar a próxima página, o cliente fornece esse cursor, permitindo que a consulta retome a partir daquele ponto, sem precisar “pular” todos os registros anteriores.

⚠️Atenção

No cursor-based, não existe o conceito nativo de página específica. O usuário só consegue avançar ou retroceder sequencialmente.

Quando o Offset não representa a ordem de exibição?

Muitas vezes, o campo “ID” na tabela de posts ou registros não reflete a ordem que o usuário espera ver. Pode ser necessário um outro campo, como “posição”, “data de publicação” ou mesmo um campo personalizado para controlar a ordenação exibida.

⚠️Atenção

Assumir que o ID sempre é a ordem exata pode comprometer a lógica de paginação — principalmente quando registros podem ser reordenados, editados ou removidos.

Como funciona a navegação para páginas específicas no Offset?

Na estratégia offset, a possibilidade de navegar diretamente para qualquer página é uma de suas maiores vantagens. Exemplo: se há 20 posts por página e você quer acessar a página 21, basta pular os 400 primeiros (20 x 20) e retornar do item 401 ao 420.

Limitações da Cursor-Based Pagination

O cursor-based pagination não permite acesso direto a uma página arbitrária — sempre é necessário passar pelo(s) cursor(es) anterior(es). Isso pode dificultar para quem precisa pular para uma página específica, mas aumenta a eficiência para buscas sequenciais e scroll infinito.

Quando usar Cursor-Based Pagination?

1
Passo 1: Avalie se o volume de dados é alto e o scroll infinito é desejado para UX moderna.
2
Passo 2: Implemente quando performance na navegação sequencial for crítica e não há necessidade de pular direto para uma página distante.

Atenção

Cursor-based não permite “pular” para a página 20 instantaneamente; exige navegação por etapas.

Quando usar Offset-Based Pagination?

1
Passo 1: Escolha quando o usuário precisa de navegação direta por páginas (como em tabelas administrativas).
2
Passo 2: Prefira quando o volume de dados não for extremo ou ordenação exata por campos for essencial.

Comparativo prático entre as duas abordagens

Offset-Based Pagination

Paginação tradicional por saltos (offsets)

Prós
  • Permite navegar direto para qualquer página
  • Controle total de páginas e ordenações variadas
Contras
  • Escala mal em grandes tabelas
  • Pode exibir resultados inconsistentes se dados mudarem durante a navegação

Cursor-Based Pagination

Paginação por marcadores (cursored navigation)

Prós
  • Alta performance em tabelas extensas
  • Ideal para scroll infinito e navegação sequencial
Contras
  • Não permite saltar para uma página arbitrária
  • A navegação é feita por etapas sequenciais apenas

Ferramentas e bibliotecas para implementação

Prisma

ORM moderno para Node.js com suporte a cursor pagination

Saiba mais →

TypeORM

ORM TypeScript compatível com estratégias offset e cursor

Apollo GraphQL

Suporte pronto a paginação cursor-based através de connections

Sequelize

ORM popular para Node.js com suporte tradicional a offset

Principais erros ao escolher paginação

1
Erro comum: Assumir que a ordenação pelo ID sempre é a desejada.
2
Erro comum: Usar offset em bancos com milhões de registros sem índices otimizados.
3
Erro comum: Implementar cursor quando navegação por página fixa é indispensável para o negócio.

Dica

Sempre alinhe o tipo de paginação com as expectativas de uso definidas junto ao time de produto.

Dicas finais para escolher a melhor abordagem

Analise cuidadosamente o volume de dados envolvido, os requisitos de navegação do seu sistema e o padrão de acesso mais utilizado pelos usuários antes de escolher entre offset ou cursor. A escolha certa pode representar a diferença entre uma experiência fluida ou frustrante.

Checklist de Implementação

Avaliou o formato de navegação esperado (página específica vs scroll sequencial)
Revisou limitações de cada modelo de paginação
Testou a performance em grandes volumes
Considerou ordenação customizada além do ID
Implementou fallback para mudanças de dados dinâmicos

Domine React e Node com o CrazyStack

Aprenda técnicas avançadas de React com nosso curso completo