Fort comme un turc
Par Mathieu Lecarme le mercredi, 5 mai 2004, 12:40 - Lien permanent
PHP est connu pour ses moults fonctions (sans trop de cohérance ni de nomenclature normalisée, mais bon, c'est le charme du bazar), et sa possibilitée d'en rajouter simplement de nouvelles. PHP4 va plus loin, et via son moteur Zend , permet de rajouter des plugs directement au niveau du moteur du serveur. Deux grands classiques, le debugueur, et l'optimisateur de code. Pour commencer, un petit test de Turk mm cache avant de tester la solution officielle PHP : APC (Advanced Power Cache)
Zend extensions
Les zend_extensions modifient directement le comportement du moteur de PHP, il faut donc faire attention, il est possible qu'il y ait des conflits ou des bugs bizarres. C'est rare aussi que des hébergeurs mutualisés s'amusent avec de tels outils, mais sur sa machine, on peut faire ce que l'on veut, et ce n'est pas très compliqué à installer grâce à la fonction phpize qui facilite la procédure d'installation à partir des sources. Certaines extensions sont même disponibles depuis PECL (Perl Extension Community Library) .
Fonctionnement de PHP
Bien que plus évolué que du CGI, PHP reste frileux dans son intégration au sein du serveur web. Chaque fois qu'une page php est appelé, elle est parsé, vérifié, puis interprété. Les actions inter-process sont interdites, et seul une API trés "roots" permet d'utiliser de la mémoire partagée. Face à de l' ASP, ça ne pose pas de problèmes, mais comparé à des servlets java ou du .NET, ça commence à faire léger. PHP est conçu pour supporter du code pourri, une bénédiction pour Free. Il peut limiter l'utilisation mémoire ou processeur sur un process, interdire des fonctions, et surtout isoler les process. Même avec des boucles infinies je ne suis jamais arrivé à crasher le serveur, les autres pages restes disponibles, au pire, on tue un fils d'Apache, sans gêner les autres. Cette robustesse est sympathique, mais la possibilité de faire des choses plus adulte, plus souple, plus efficace se fait rapidement ressentir.
Turk MMCache
Turk MMCache est une belle amélioration au moteur de PHP. Elle comble une partie des faiblesses de PHP.
Cache
Comme fonction principale, Turk MMCache garde une version parsée et validée du code PHP, évitant ainsi de recommencer cette étape à chaque fois. Il peut garder ce PHP maché en RAM, et quand il n'y a plus de place dans l'espace mémoire alloué, en disque. Si le fichier PHP est modifié, son cache est régénéré à l'interprétation. Le code peut aussi être optimisé, le cache compressé, la vérification de modification peuvent être neutralisés pour un site en production, tout comme le debugging. Tout ça étant paramétrable simplement depuis le fichier php.ini .
Variable partagée
Chose très difficile à faire avec le PHP de base via la shared memory, MMCache permet très simplement de stocker des variables en RAM et les utiliser depuis une autre page. Pour éviter de saturer la RAM, ce stockage à une durée de vie. Des fonctions évoluées permettent d'utiliser ce cache: cache de résultat de fonction, cache de page, et même gestion de session en RAM.
Interface Web
Tous ces réglages sont accessibles via une interface web, chose courante dans les produits commerciaux.
Encodeur
Il est possible de faire du PHP closed source. De distribuer directement un binaire. Moralement, c'est moyen pour un produit Open Source, et de toute façon, un decompileur doit exister, comme pour java.
Installation
Ce produit s'installe sans problèmes en suivant les instructions. Sur Debian, il faut juste commencer par installer les outils de développement php : apt-get install php4-dev.
Sur OSX Panther, ça compile sans problèmes. La procédure est carrée, ça devrait compiler n'importe ou.
Performance
Un petit bench, juste pour le plaisir. Un site bien violent avec du Smarty, du SQL, du Wiki.
Cache code
Comme dans ce "post":/archives/000022.html#more , on test 100 fois une page en augmentant le nombre d'accès concurrent. Pour le test, le code n'a pas été modifié, et les réglages du cache sont ceux donnés en exemple sur le site.
||PHP brut|PHP avec mm|page statique| |1|400|200|200| |2|731|401|200| |3|982|402|200| |4|1393|581|200| |5|1588|654|200| |6|1689|791|200| |7|1938|911|200| |8|2202|1025|200| |9|2428|1208|200|
cache de la page
Turck MMCache propose directement une fonction pour cacher le contenu d'une page, le résultat est magique, il suffit de préciser une clef pour différencier les différents caches et une durée de vie.
Pour comparer, un premier bench est fait avec un cache qui stocke dans un fichier le contenu de la page
||PEAR Cache light| MMCache| Statique| |1|200|200|200| |2|200|200|200| |3|200|200|200| |4|200|200|200| |5|201|200|200| |6|221|200|200| |7|399|200|200| |8|401|200|200| |9|800|200|200|
On obtient des scores comparables a des fichiers statiques, il faudrait des tests plus complets pour arriver à le stresser, voir comment ça crash.
Petit raffinement, il existe une fonction permettant d'effacer le cache en RAM, si l'on change le contenu, par exemple.
Les résultats semblent un peu magiques, il faudrait voir dans les newsgroups ou les bugs report pour trouver la faille de cette merveille.


Commentaires