Bonjour,
J'ai une boucle qui dans le temps était assez complexe, genre 4
jointures et beaucoup de tests et aussi beaucoup de lignes en
résultat. Bref ce query mettait dans les 3 secondes dans mysql.
J'ai optimisé cette boucle, la décomposant en deux boucles plus
simples et la première remplit un tableau à l'aide de #SET/#GET,
et la seconde boucle utilise le résultat comem ceci: id_article
in #GET{liste_articles}. Voila le genre de choses que l'on fait
de plus en plus depuis l'ajout de ces variables.
On avait fait le changement sous SPIP 1.9, et tout se passait
bien. Depuis le passage à la 2.8, la boucle qui remplit le tableau
fait planter la page, en fait ce remplissage prend tellement de
temps que l'on tombe sur un mysql timeout et on perd la connexion
SQL pour le reste de la page.
voici la boucle:
#SET{liste_articles,#ARRAY}
<BOUCLE_articles(SPIP_MOTS_ARTICLES spip_articles){id_mot}{lang}>
#SET{liste_articles,#GET{liste_articles}|
array_merge{#ARRAY{#ID_ARTICLE,#ID_ARTICLE}}}
</BOUCLE_articles>
C'est assez simple, mais au dela d'un certain nombre d'articles
(entre 1000 et 1500), cette boucle prend tellement de temps qu'on
en perd la connexion à la base de données.
J'ai essayé de retirer le contenu de la boucle, et ca fonctionne.
J'ai essayé de mettre un point dans la boucle, ca affiche 1500
points sans problème.
Pensant que la fonction array_merge était trop gourmande quand le
tableau grossit, j'ai mis un filtre perso qui ne faisait qu'un
echo "."; et ca plante.
Ainsi il semble que si j'applique un filtre dans cette boucle,
quel qu'il soit, ca plante. Comme je vous l'ai dit, ca
fonctionnait sous SPIP 1.9. N'y a-t-il donc pas un élément nouveau
qui fait ralentir SPIP dans ce genre de situation? Quelqu'un
a-t-il eu des expériences similaires? Des pistes sur ce qui m'arrive?