Efficacité du critère age
Au vu des coûts affichés par var_profile et des mesures affichées par phpMyAdmin, les critères de comparaison de date sont 10 fois plus rapides lorsqu'on leur passe une constante à la place de NOW() :
- dans mes tests c'est toujours vrai à partir du 2eme appel, mais parfois dans phpMyAdmin le temps du 1er appel est équivalent au temps avec NOW()
- que la constante soit un DATE '2021-09-20' ou un DATETIME '2021-09-20 22:58:32'
Serait il pas intéressant de remplacer le NOW() du critère age par une variable PHP calculée juste avant ? C'est à dire remplacer $col = calculer_param_date("NOW()", $date_orig);
par $now=date('Y-m-d H:30:00'); $col = calculer_param_date("\"$now\"", $date_orig);
.
Sur une page age-intensive, ça semble vraiment faire une différence.
Rq : En n'indiquant pas précisément les minutes et les secondes, on gagne en possibilité de bénéficier du cache MYSQL et ne perd pas vraiment de précision car calculer_param_date()
renvoie "TIMESTAMPDIFF(HOUR,$date_orig,$init)/24"
qui calcule à partir des heures.
EDIT la modification a déjà été faite dans SPIP 4. Reste une petite amélioration possible éventuellement : voir plus bas.