XHTML.net

Technology talks by Loïc d’Anterroches

News, articles, PHP, scripts, XHTML/CSS, …

  1. Home
  2. PHP: Hypertext Preprocessor
  3. Pluf - Framework en PHP5

Packager pour Pluf

The 2008-04-13 at 20:52 by Loïc d'Anterroches filed under Pluf - Framework en PHP5.

Vous avez peut-être constaté que pour coder proprement une application vous compartimentez votre code en un certain nombre de fichiers. Cela vous donne donc un code tout propre où vous retrouvez facilement vos petits. Maintenant, dans le cas d’une application web, cela pose un problème d’efficacité. Prenons l’exemple d’une application qui se trouve dans environs 100 fichiers :

  • votre serveur va devoir dans le pire des cas accéder 100 fichiers pour générer votre page ;
  • vous n’avez aucune garantie que vos fichiers sont rassemblés au même endroit sur le disque ;
  • si dans le cas de php vous utilisez des include_once cela va faire beaucoup de test d’existence de fichiers pour rien ;

Maintenant si vous pouviez toujours charger dans un fichier, cela serait bien pratique. Par contre, il faut bien entendu ne pas tout coder dans un seul fichier. La solution est de coder normalement, avec par exemple un fichier par class/module, et au moment de mettre en ligne, vous compilez le tout en un gros fichier.

Cela vous coûtera un peu de mémoire car toute la bibliothèque va être chargée mais les performances au niveau du disque seront bien meilleures. Si vous ne touchez pas l’occupation mémoire limite de votre hébergement, c’est tout bénéfice.

Pluf a maintenant un packageur. Cela réduit le code à un gros fichier de 250ko environ, que du code, pas de commentaires.

Au niveau performance, cela donne pour une page assez complexe de mon application les résultats suivants :

Avant : Mémoire 3Mo, temps 0,3s, fichiers inclus 74.
Après : Mémoire 9,5Mo, temps 0,25s, fichiers inclus 11.

On gagne du temps et on perd de la mémoire…

Comments from readers

Laurentj said:

Dans jelix, nous aussi on a ce genre de fonctionnalité dans le système de build : on a carrément un préprocesseur ;-) Dans l'édition optimized et gold, tout le coeur de jelix est rassemblé en un seul fichier. Mais ça ne prend pas plus de place en mémoire, puisque tout le coeur de jelix est utilisé à chaque fois ;-) Les parties qui ne sont pas forcément utilisée tout le temps restent à part et il y a des require/include là où il faut. Cependant, les fichiers de chacune de ces parties sont souvent rassemblés aussi en un seul.

Loïc said:

Je savais que Jelix avait un préprocesseur pour faire des builds optimisés (PHP4, PHP5, etc.) mais je ne savais pas qu'il était aussi utilisé pour faire un paquet en un seul fichier.

Pour éviter de packager trop de choses, on peut définir un fichier packager.ignore pour n'inclure que la base ou pour faire des paquets différents. Bon, dans tous les cas, pour le moment ce n'est qu'une bidouille d'un jour. Cela aura le temps de maturer.

Voice your ideas

It is painless and I try not to kill electrons in the process.


Your email is required but will not be shared nor displayed.


Do you think your comment will force me to write even better stuff next time? If so, you simply rock.


Logo of Plume CMS