Hello,
3. Ne s'intéresser qu'aux optimisations visibles par ApacheBench, c'est
réduire un phénomène
à ce qu'en perçoit un instrument d'observation particulier. C'est
équivalent à assimiler la
réalité à ce qu'en raconte la télé. ApacheBench a un "hors champ"
colossal: la taille des processus. Pour avoir écrit en divers
assembleurs natifs et en C des interprètes et des compilateurs, je
SAIS que la concaténation de chaines est ce qu'il y a de plus gourmand
en mémoire. Partant, écrire:
Mettons donc qu'il y a deux caractéristiques importantes de la
performance d'une page Web dynamique :
- le temps CPU
- la mémoire occupée.
ApacheBench permet de mesurer, sur une machine vide, le temps CPU. Après
divers essais, j'ai trouvé qu'il n'y a à peu près aucune différence
entre les deux types de concaténation que tu évoques.
Pour ce qui est de la mémoire occupée, on a évoqué le sujet en forum. On
peut récupérer la mémoire occupée par un processus grâce au répertoire
/proc (sous Linux). Si je ne me suis pas trompé d'indicateur (champ
VmData dans /proc/<pid>/status), j'ai trouvé que sur ma config, un
processus Apache utilisant PHP prend plusieurs méga-octets de données.
La question est double :
- est-ce que ton optimisation en est une ? tu ne sais pas si
l'interpréteur PHP (qui en fait compile le code PHP en byte-code) ne
fait pas la même chose dans ton dos (en plus sophistiqué peut-être) ; tu
ne sais pas si, au contraire, une concaténation multiple n'est pas
transformée en une série de concaténations utilisant des variables
muettes comme résultats intermédiaires...
- si oui, est-ce que le gain éventuellement apporté par cette
optimisation représente une amélioration substantielle ou marginale par
rapport aux plusieurs méga-octets évoquée plus haut ? j'ai tendance
intuitivement à penser que c'est marginal (un article entier traité par
SPIP fait entre 5 et 50 Ko ; une page HTML générée par SPIP, entre 10 et
100 Ko)
Bref, le seul moyen de peser l'intérêt de cette optimisation (qui ajoute
de la complexité dans le code), c'est d'avoir des mesures.
Si ApacheBench ne
le voit pas, dommage pour lui (il est peu crédible de toutes façons: il
ne donne meme pas 2 fois les memes timings pour un meme jeu de test),
Peu crédible parce qu'il ne donne pas deux fois les mêmes timings pour
le même jeu de test ? Il y a l'environnement système qui, même s'il
représente des variations plutôt faibles, suffit à rendre les résultats
non constants (sans compter SPIP lui-même, qui effectue d'autres
opérations : il faut savoir relancer les tests un certain nombre de fois
pour épuiser notamment les tâches de syndication). Je ne vois pas en
quoi cela rend cette mesure peu crédible... Libre à toi de trouver un
protocole de test plus satisfaisant.
mais je veux bien parier que les hébergeurs de SPIP, qui se plaignent
régulièrement de la taille des processus PHP, le verront
"Régulièrement" ? Je ne sais pas de quoi se plaignent les "hébergeurs
SPIP" (qui en général hébergent beaucoup d'autres choses au point qu'il
est hypocrite de prétendre que c'est un programme particulier qui pose
problème), mais au vu de la différence de facilité (et de coût) entre
augmenter la mémoire et augmenter la puissance processeur, connaissant
aussi la relative lenteur de PHP, j'aurais plutôt tendance à trouver que
les ressources CPU sont plus importantes à ménager.
Du reste, on parle ici de la génération de pages, qui est
statistiquement peu fréquente grâce à l'existence du cache... Il n'y a
donc pas lieu de chercher à gagner des pouillèmes par tous les moyens.
(à moins que
PHP soit tellement inadapté à la compilation qu'il ne profite pas de
ça; mais alors il faut se poser la question de son utilisation dans
cette partie de SPIP car à mesure que celui-ci grossit, PHP ne saura
plus l'exécuter dans les temps et espace impartis).
En fait, SPIP utilise PHP simplement parce que c'est le langage de
programmation Web le plus répandu. Il est hors de question, dans la
distribution principale de SPIP, d'inclure des bouts de code programmés
dans un autre langage (et surtout pas un langage nécessitant une
compilation séparée), car alors beaucoup d'utilisateurs se verront
exclus d'office. PHP n'est pas un langage foudroyant en termes de
performances (euphémisme) mais c'est le seul qui permette une telle
diffusion et un tel accès.
(Voir : http://www.bagley.org/~doug/shootout/
Même Perl est souvent deux à trois fois plus rapide que PHP.)
Amicalement
Antoine.