(Je réponds sur spip-dev)
07/11/10, Yohann:
Cool, mais une question que je me pose depuis longtemps et que
j'oublie tout le temps de demander : le test que l'on fait sur la
balise, il est sauvegardé en mémoire ? Si ça ne sauvegarde pas, c'est
pas un peu lourd de faire trop de tests ?
Excellente question. J'ai souvent le doute aussi et je repousse
toujours le moment de demander ou d'y réfléchir, du coup merci d'amener
ce sujet.
Le code est en 2 parties :
1. une fonction html5_permis() qui effectue un test sur la variable
$GLOBALS['meta']['version_html_max']
2. une fonction balise_HTML5_dist() qui génère le code du cache ainsi :
$p->code = "(html5_permis() ? ' ' : '')";
Si je comprends bien, le 2e point veut dire que l'appel à
html5_permis() n'est pas fait à la compilation du squelette, mais à
chaque évaluation du PHP généré automatiquement par celle-ci
(c'est-à-dire chaque fois que le cache *HTML* est recalculé).
C'est une bonne chose dans le sens où si on change la conf, on n'a pas
besoin de vider le cache des squelettes : le test sur $GLOBALS['meta']
est fait de toute façon à chaque recalcul du cache HTML.
C'est une mauvaise chose dans le sens où l'on ne change pas ce genre de
conf tous les jours, et où donc on pourrait se rappeler de la valeur
lors de la compilation du squelette. Ça demande de vider le cache si on
change la conf, mais c'est pas la mer à boire, surtout que SPIP fait
peut-être déjà ça tout seul (quelqu'un sait ?).
On pourrait peut-être donc remplacer le code de balise_HTML5_dist()
ainsi :
$p->code = html5_permis() ? ' ' : '';
Ça voudrait dire que le code produit par la compilation du squelette
contiendrait directement ' ' ou "", ce qui serait effectivement plus
efficace dans le cas d'appels répétés.
Si c'est bien ça, je changerai le code pour refléter ça, à moins que
quelqu'un nous explique que c'est une mauvaise idée. ![]()
Dans tous les cas, je tiens tout de même à relativiser l'impact de
l'un ou l'autre choix :
- Le test en question est petit, et est fait sur la valeur d'une
variable. Pas de traitement lourd a priori donc, il me semble
(comment/quand est fait le calcul de $GLOBALS['meta'] ?).
- Les tests répétés ne sont effectués qu'à chaque recalcul du cache
HTML, c'est-à-dire toutes les quelques heures. Pas à chaque hit.
Le cache HTML des pages joue donc son rôle dans tous les cas.
C'est vraiment un effort désespéré de comprendre comment marche le
cache de SPIP. Si quelqu'un peut compléter ou corriger ce raisonnement,
c'est trop bien.