Un petit billet pour dire deux chose: d'abord le site a été migré sur ma dedibox, d'où la coupure de service que certains ont pu constater. Deuxième chose, je suis à la recherche d'une appli de gestion d'OPML qui gère l'attribut htmlUrl (automatiquement à partir du noeud /channel/link d'un RSS). Voili voilou.
Comme (presque) chaque fin de semaine, eZ Systems publie sa community newsletter . Celle-ci est un peu particulière puisqu'elle annonce le lancement du développement de la version 4.0 d'eZ Publish et sa sortie pour la fin de l'année ou plus probablement (soyons réaliste ;-)) le début de l'année prochaine. Cette version utilisera PHP5 et sera basée sur les eZ components . Serait ce la fin de l'histoire "tumultueuse" eZ Publish/PHP5 ? En tout cas, si eZ Publish 4.0 est aussi bien pensé, réalisé, et documenté qu'eZ components, ce sera un très bon cru ! J'espère deux choses de cette nouvelle version :
Sur ce deuxième point, de petits trucs pourraient contribuer à rendre l'interface plus facile d'accès (un peu de javascript par ci, une réorganisation de quelques éléments par là, ...). C'est un vaste sujet, j'y reviendrai probablement dans un autre billet, copies d'écran à l'appui...
Une dernière chose au sujet de cette dernière community newsletter, elle liste aussi les dernières contributions ajoutées. Parmi celles ci, Plopix en a publié une complémentaire avec le système de tags que j'évoquais au début de ce blog où il a laissé un commentaire . Je ne l'ai pas (encore) testé, mais ça m'a l'air intéressant.
Dans les applications PHP5, la séparation de notre code en plusieurs couches est devenue primordiale, je me répÚte un peu, mais depuis PHP5, on ne parle plus de scrypt, mais d’application, donc qui dit application dit architecture solide et modulable, c’est pourquoi on recours au motif de conception comme ceux du GOF qui rescence plusieurs solutions des problÚmes particuliers. Dans cet article on se consacre la partie “moteur” de notre application, le Front Controller permettant de charger et d’executer un module. Le notre sera simple et parametré par “module”
Le travail commence, on va définir une interface que nos modules devront implémenter, pourquoi définir cette interface ? tout simplement parce qu’on cherche créer une application solide modulable et portable.
Comme on le voit, notre interface “Module” demande une méthode, celle-ci prend en paramÚtre la classe HttpRequest. Cette classe permet la récupération de toutes les requetes passées notre application et pouvant etre utile notre module donc on récupérera les tableaux $_POST et $_GET qu’on transmettra notre méthode par l’intermédiaire de HttpRequest
un peu la maniÚre de nos modules, on va définir ici une nouvelle interface front controller que notre moteur devra implémenter, le principe est le suivant. Dans notre MVC notre Front Controller impose la méthode LoadModule, celle-ci chargera un module implémenté par l’interface Module, donc possédant une méthode execModule, qu’il initialisera ! Voyons un peu le code…
On passe maintenant l’écriture du la classe Engine, qui implementera Front Controller. Celui-ci traitera donc les requêtes passées l’application via la classe HttpRequest, notre classe Engine recuperera le paramÚtre module et chargera la classe en rapport celui-ci…
Pour illustrer notre exemple de Front Controller, on va créer un simple module affichant l’écran le mythique “Hello World !”, On se souvient qu’il devra implémenter l’interface Module et donc disposer d’une action execModule ()
Donc on accede au module via : “http://monsite.com?module=SayHelloWorld” …hum, il serait peut etre interessent de mettre en plus, l’url rewriting, non ? (;
Voila un simple Front controller paramétré, il se veut assez simple et modulable, et devra sans doute être modifié afin d’etre integré dans une application plus poussée. on pourra aussi utiliser la classe View vue dans un article précédent pour commencer avoir une petite approche d’application PHP légÚrement evoluée. De plus une modification du Modele pourrait être d’ajouter une classe i18n permettant l’internationalisation de l’application.
La version 1.0 stable du framework de développement PHP Symfony est sortie hier.
Cerise sur le gâteau, l'intégralité du livre officiel est également publiée sur le site. Croyez-moi, vous pouvez vous ruer dessus sans risque, c'est une énorme tuerie (et c'est un type qui entame son 5ème projet Symfony qui vous le dit !)
Les beaux jours reviennent, le Zend Framework est de sortie, dans sa version 0.8, qui apporte son lot de belles choses, comme par exemple le passage Zend_Auth, Zend_Mail_Read et Zend_Rest_Server dans le core.
Youpi.
L'optimisation et les performances d'eZ Publish sont des sujets qui reviennent assez régulièrement sur les forums et pas mal d'articles ont été publiés sur ces sujets dont une série récemment sur le site ez.no car Il faut avouer qu'eZ Publish est plutôt gourmand en ressources et qu'il faut une (des) machine(s) robustes pour en tirer parti sur des sites à fort trafic.
L'installation d'un cache d'opcode est probablement l'optimisation la plus efficace, la plus simple à mettre en oeuvre et celle qui impactera quasiment tous les secteurs d'utilisation d'eZ Publish puisqu'elle intervient au niveau de l'interprétation du code PHP. Personnellement, j'utilise eAccelerator qui semble un peu plus efficace qu'APC . Il faut veiller à bien le configurer pour qu'il ait suffisamment de mémoire partagée sous peine de voir apparaître des pages blanches sans explication. Ma configuration d'eAccelerator est la suivante :
extension=eaccelerator.so eaccelerator.shm_size="48" eaccelerator.cache_dir="/var/cache/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="0"
Les outils pour webmaster de Google fournissent quelques graphiques indiquant comment Googlebot indexe un site. Ci-contre voici le graphique remanié par mes soins pour mon site donnant les temps de téléchargement des pages. Ce n'est certe pas très précis et plusieurs facteurs interviennent dans les temps de réponses comme l'horaire et les interventions que je peux réaliser sur le site mais ça donne une bonne idée de la tendance.
Le trait orange correspond au moment ou mes photos ont été référencées dans Google Image multipliant le nombre de pages vues sur mon site par 1.5 (6500 le 15 janvier, 10400 le 12 février)! Le trait vert correspond à l'installation d'eAccelerator. Je crois que le graphique parle de lui-même. Je n'ai pas de graphique de la charge de la machine, mais là aussi c'est flagrant lors de l'utilisation du shell...
J'ai récemment, fait quelques autres optimisations dans les templates en ajoutant quelques cache-block pour avoir une gestion plus fine du cache et je compte aussi aussi regarder du côté de l'optimisation de MySQL en lecture pour voir si je peux améliorer encore un peu les performances.
eZ Publish est fourni avec un certain nombres de scripts à lancer en ligne de commandes. À ma connaissance, il n'y a aucune documentation sur ces outils pourtant très utiles et qui peuvent faciliter la vie du développeur que ce soit en phase de développement ou en maintenance. Tous ces scripts sont à lancer à partir de la racine du site eZ Publish. Pour connaitre les options disponibles de chacun de ces script, il suffit de les lancer avec l'option --help. Les scripts détaillés ici sont dans le répertoire bin/php sauf clearcache.sh et cleanup.php.
clearcache.sh est un script shell qui permet de vider les différents cache. Il est utile lorsque PHP4 version CLI n'est pas installé, puisqu'il utilise uniquement des commandes shell pour effectuer les différentes tâches. Pour la même raison, il est très rapide. Je l'utilise principalement lors du développement pour supprimer tous les caches d'un site en utilisant un alias bash correspondant à :
$ bin/shell/clearcache.sh --clear-all
$ bin/shell/clearcache.sh --clear-all --var-subdir=XXX
où XXX est le répertoire du cache pour le siteaccess visé, par exemple plain.
ezcontentcache.php permet de vider le cache de contenu d'un noeud ou d'une sous arborescence. Il peut être utile par exemple, si dans un site vous n'avez pas configuré les options SmartCacheClear permettant de vider les caches des noeuds dépendants de ceux qui ont été mis à jour.
ezcache.php permet de vider certains caches assez finement en spécifiant uniquement un cache particulier pour un siteaccess donné. Par exemple, si vous ajouter un Custom tag comme comme dans mon billet sur l'inclusion de vidéos , il est possible de vider uniquement le cache template-override. Pratique sur un site en production, surtout si le site est très visité et si le(s) serveur(s) sont un peu justes...
Comme leur nom l'indique, ces scripts permettent de supprimer ou copier (donc déplacer...) des données dans l'arborescence. Ils sont utiles pour manipuler de gros volumes de données, là où l'interface web est limitée par le timeout PHP.
La compilation des templates est probablement l'opération la plus gourmande lors de la regénération des caches après un vidage complet. Une utilisation typique de ce script est lors de la mise en production d'un site. On vide tous les caches, mais avant d'activer le site, on compile l'ensemble des templates pour éviter une trop forte montée en charge. Une autre utilisation est la mise à jour des templates, on force la compilation des templates et ensuite, il suffit de vider les caches de contenu pour avoir la nouvelle version sans avoir vider complètement les caches.
Utile lors du développement, celui-ci permet de vérifier simplement la syntaxe des templates sans avoir à parcourir l'ensemble du site avec les options de debug.
Ces scripts permettent de faire le ménage dans la base de données en supprimant les données temporaires ou plus utilisées. flatten.php permet de supprimer par exemple toutes les versions non publiées d'objet. À manipuler avec précautions donc. cleanup.php permet de supprimer des données inutilisées. Je l'utilise par exemple pour supprimer les données des sessions expirées qui encombrent la table ezsessions .
Au lieu de partir faire du vélo ce soir, j'ai livré bataille avec PEAR. Livré bataille c'est le mot, vu le manque flagrant de documentation sur la création de serveur et packages PEAR, mais j'ai finalement réussi, grâce au tutorial de Tobias Schlitt (un peu modifié) à Arnaud Limbourg. Bref, j'ai le plaisir de vous annoncer la disponibilité immédiate du Channel PEAR PHPMafia, qui héberge pour l'instant un unique package: Zend-0.8.0. Pour l'installer, vous devez d'abord présenter le channel à votre installeur pear:
pear channel-discover pear.phpmafia.net
Puis vous devriez être en mesure d'installer le Zend Framework via un pear install classique:
pear install phpmafia/Zend-0.8.0
On spécifie la version vu que le package est en stabilité devel, pour coller au status preview du Zend Framework.
Vu comment j'ai galéré pour en arriver là, j'ai certains doutes sur le caractère 100% komifo de l'installation, donc j'apprécierais tout retour de bug et anomalies diverses que vous pourriez rencontrer à l'utilisation de ce channel, à pear@phpmafia.net par exemple, ou dans les commentaires de ce billet :-)