Re: réflexion sur la pagination
Fil <[email protected]>
| Newsgroups | gmane.comp.web.spip.devel |
|---|---|
| Message-ID | <CAERh8-mMa2HwPNq9_n59jivHD_M6-BGzQkcSZduD5gceRn0SHA@mail.gmail.com> |
J'ajoute un autre problème : lorsqu'on passe d'une page à l'autre, il est possible que les messages aient changé (ajout de nouveaux messages dans la base), ce qui provoque un décalage pas très heureux. On le constate en permanence sur seenthis. Une piste de solution pour cela pourrait être de se baser non pas sur le nombre de messages qu'on ignore, mais sur un marqueur d'ordre (id_x ou date). -- Fil 2016-04-10 11:54 GMT+02:00 Gilles Vincent <[email protected]>: > Salut la liste, > > le mécanisme de pagination automatique dans SPIP est cool,.. mais loin > d'être optimal. > Sur forum.spip.net, il génère des requêtes qui peuvent prendre plus de 2 > secondes ! > > Voici le type de boucle générée : > http://spip.pastebin.fr/46321 > > La requête parcourt prêt de 9 millions de lignes via des tables > temporaires sans passer par un index. > Voici le résultat du EXPLAIN : > http://spip.pastebin.fr/46322 > > Le problème est lié à plusieurs éléments : > > - Une combinaison LIMIT + ORDER BY > - Un LIMIT important dans des boucles en UNION > - Un tri sur un champ calculé > > Pour résoudre cela, je vois plusieurs approches : > - revoir la navigation pour avoir moins d'accès directs (voire enlever les > accès directs et utiliser un chargement progressif) > - mettre en cache des résultats intermédiaires avant de les trier (pour > pouvoir les utiliser à plusieurs niveaux de pagination) > > Je n'invente rien, je m'inspire d'exposés trouvés sur slideshare : > > http://fr.slideshare.net/MarkusWinand/backend-to-frontend-when-database-optimization-affects-the-full-stack > > Est-ce que ça vous semble pertinent de travailler sur un tel chantier ? > Perso, avec un accès aux forums, j'ai un bel espace de travail ;-) > > .Gilles > > > _______________________________________________ > liste: http://listes.rezo.net/mailman/listinfo/spip-dev > doc: http://www.spip.net/ > dev: http://trac.rezo.net/trac/spip/ > irc://irc.freenode.net/spip >