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.