Consejos para mejorar la paginación

La paginación es algo de lo más costoso a la hora de realizar una búsqueda. Si nos ponemos en el caso de miles de registros con ordenación por cierto campo, la búsqueda puede ser una query muy costosa. Si además unimos el cálculo total de registros encontrados, la página puede tardar mucho en devolverse.

Debido a ello, para agilizar este tipo de páginas existen unos consejos a tener en cuenta:

  • Cachea todo lo que se pueda: el caché evita que se realicen consultas a la BD.
  • No muestres todos los resultados: Google no lo hace y nadie se queja por ello. Limita el total de registros a 100 o 500, nadie visita más de 10 páginas normalmente.
  • No muestres el total de páginas o páginas intermedias: ofrece tan solo en enlace a “página siguiente”, para lo cual puedes obtener 21 registros y mostrar solo 20, así si la consulta te devuelve menos de 21 es que no hay página siguiente.
  • Estima el número de resultados: esto también lo hace Google, en vez de calcular el número exacto, se trata de estimar el número aproximado de resultados. Usa EXPLAIN para obtener ese número, puedes usar el campo rows como aproximación.

Four ways to optimize paginated displays

Smooth Paginator: paginación 2.0

La paginación suele ser algo que suele ir según gustos, los hay quienes quieren un sencillo [anterior] [siguiente], los hay quienes muestran la página actual y algunas anteriores y otras posteriores. Aún sean las preferencias de cada cual, no se puede negar que este estilo de paginación es muy 2.0.
smoothpaginator.png
Muesta unos enlaces que nos llevan a páginas y otros enlaces que nos llevan a un grupo de páginas. Por ejemplo, si estamos en la página 20, nos aparecerá también el grupo [60..69], así no tendremos que ir navegando hasta poder llegar a este grupo, podremos acceder de forma rápida.
Incluye un efecto que despliega la paginación, muy vistoso, pero supongo que si la paginación se encuentra oculta por el scrolling (como suele pasar), no se apreciará en absoluto.
Smooth Paginator
Vía / dzone