[Symfony] Pagination optimisée

Il existe beaucoup de Bundle permettant de mettre en place un système de pagination au sein de votre projet Symfony. Le plus connu étant KNP Paginator qui, il est vrai, m’a beaucoup aidé à mes débuts. Mais ils ont tous un énorme défaut : l’optimisation.

En effet, pour créer une pagination sur une requête avec Doctrine, il nous faut une information cruciale : le nombre total de résultats. Ainsi, ils exécutent la requête sur l’intégralité de votre base, comptent le nombre de résultats obtenus, puis « coupent » les résultats pour ne retourner que ceux voulus (voir, pour certains, effectuent une seconde requête).

Dans les faits, ça fonctionne, mais dès que vous essayez de paginer une liste de plus d’un millier de résultat, votre serveur commence alors à prendre très cher, rallongeant beaucoup le temps de chargement pour vos visiteurs.

Pourtant, Doctrine, intégré à Symfony, a mis en place, depuis Janvier 2012, la méthode Paginator qui permet d’optimiser très simplement un sytème de pagination.

Pour les besoins d’un de mes projets professionnels, j’ai eu l’occasion d’automatiser la chose avec un nouveau Bundle, que je vous mets à disposition : Tiloweb Pagination Bundle (très original).

Utilisation de Tiloweb Pagination Bundle

Etape 1 : Installation

$ composer require tiloweb/pagination-bundle "dev-master"

2 commentaires

  1. Bonjour,
    Merci pour votre contribution. Une idée du pourquoi ces autres bundles pourtant forts connus n’ont pas adoptés un fonctionnement similaire ?

    1. Bonjour,

      Je pense simplement que la grande majorité des sites internets ne nécessite pas de travail supplémentaire au sujet de l’optimisation. Le nombre de données / le traffic n’est généralement pas assez important pour en venir à ce genre de réflexion.

      A mon avis du moins.

Laisser un commentaire