Moi qui croyait que PHP gardait une cache des fichiers et ne faisait pas un include et une compilation à chaque fois qu'une page est loadée... Voici PHP Accelerator (PHPA).
L'introduction est révélatrice:
"Every time a PHP script is accessed, the PHP engine must open the script file and read, parse, and compile the file contents into a compiled form. Only then can the compiled code be executed. With scripts often including other scripts, this work can become a significant part of the overall time to deliver a page. It can also impact I/O performance, and require much dynamic memory allocation that in itself can be time consuming."
Pour ceux qui ne comprennent rien à ce charabia, sachez que le contenu dynamique d'un site PHP (comme l'insomniaque) existe grâce à un ensemble de scripts PHP qui sont "interprétés" à chaque fois qu'une page est loadée. En réalité, le script (la source du "programme") est recompilée et exécutée dans le serveur web à chaque fois, ce qui est très inefficace.
Pourquoi PHP n'a-t-il pas une cache intégrée?
J'ai de la difficulté à comprendre comment PHP peut avoir été aussi mal chié: même mod_perl garde une version compilée des scripts. C'est pour ça que mod_perl a été écrit au départ! Il me semble que tant qu'à faire un language "web-only" (comme PHP était au départ), j'aurais fait ça comme il faut.
Désolant. Bien qu'il existe maintenant des solutions[1] à cette aberration, il est clair que ce n'est pas tout le monde qui est au courant. La plupart des serveurs PHP ne doivent pas avoir PHPA d'installé.
En fait, j'en viens à me questionner sérieusement sur les motivations de Zend ("The PHP Company") qui a écrit le "parser" pour PHP4. En effet, Zend vend un "Zend Performance Suite" qui "accélère" PHP. Serait-ce possible que Zend ait évité d'intégrer cette functionalité fondamentale à PHP initialement pour pouvoir vendre leur produit ? Pour être parfaitement honnête, notons que Zend offre ce qui semble une version limité du "Performance Suite" sous la forme du Zend Optimizer. Mais notons que ceci n'est pas une cache mais un optimiseur.
Pour en revenir à PHPA, il semble que la license de PHPA est à tout le moins floue ("There is no official license for PHPA, and it's free for use.") et le code source n'est pas disponible, ce qui est plutôt louche. Aussi il semble y avoir eu une controverse au sujet de douteuse "activation keys":
Activation keys to be removed! (21 June)Since its introduction, the PHPA activation key has been a controversial feature, but a vital part of the continuing process of product improvement for PHPA. Not only has it been a useful measure of interest in PHPA, it's been integral to the process of obtaining feedback, and having people's experiences be used as part of a continuous improvement process.
However as PHPA has matured, they have served their purpose and all releases from 1.3.2 onwards will be 'activation key free'.
En tout cas, il est clair que je vais commencer à envisager une solution du genre pour l'inso.
--
[1] Voici une liste aussi exhaustive que possible des caches PHP disponibles.