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 :
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.