Booster encore plus PluXml !

Un moteur de blog plus rapide que PluXml ? euu... PluXml ?

Vous allez me dire... PluXml n'est pas lent, on ne vas pas y gagner grand chose. En effet, avec mes articles et mes commentaires j'arrive à 0.054s (j'ai ajouté un compteur en bas de page). Maintenant nous allons voir comment descendre en dessous voir diviser le temps par plus de 2 (c'est un minimum avec 60 articles et 30 commentaires, mais quand on a des centaines d'articles ça peut diviser le temps par 10).

Après quelques tests il s'avère que la seule chose qui prend réellement du temps dans PluXml est l'affichage de la liste des dernier articles et commentaires (regardez dans ma sidebar).
La technique que nous allons utiliser est la mise en cache. Ce système de mise en cache est ultrarapide à mettre en place d'autant plus qu'il se met dans le dossier du thème et qu'il n'y a donc pas besoin de le refaire quand on change de version de PluXml. L'autre avantage de ce système est qu'il se met à jours automatiquement, ainsi il vérifie périodiquement qu'il n'y a pas de nouvel article ou de nouveau commentaire et se met à jours dans le cas échéant.
J'arrête de vous faire attendre, nous allons passer au code tout de suite.

Le fichier staticcache.php à mettre dans le répertoire du thème.

Il faut maintenant modifier le fichier sidebar.php de votre thème (voir un exemple : sidebar.php.txt):
Ajouter include_once(PLX_ROOT.'themes/'.$plxMotor->style.'/staticcache.php'); au debut du fichier, après le if(!defined('PLX_ROOT')) exit;.
Ajouter if(plxCache::startCache('sidebar', $plxMotor)) { juste en dessous si vous voulez tout mettre en cache.
Ajouter <?php } plxCache::stopCache('sidebar', $plxMotor);?> à la fin du fichier.

Quelques explications : Ce script utilise ob_start();, une fonction de php permettant d'enregistrer la sortie texte de php. C'est à dire que l'on sauvegarde tout ce qui est écris entre ob_start() et ob_end_clean();. Le texte est récupéré à l'aide de ob_get_contents();.
Coté PluXml, on récupère la date de modification du dossier (si si, ça fonction, la fonction filemtime permet aussi de traiter les dossiers.). Le fichier cache est nommé en fonction de la date du dernier commentaire et article. Si cela change le script recrée un fichier cache et supprimer l'ancien.

La seconde partie qui prend plus de temps est l'affichage des articles dans la page home.php :
Ajouter include_once(PLX_ROOT.'themes/'.$plxMotor->style.'/staticCache.php');
if(plxCache::startCache($plxShow->plxMotor->page.'home', $plxMotor)) {
avant la boucle d'affichage : while($plxShow->plxMotor->plxRecord_arts->loop()): # On boucle sur les articles.
On ajoute la la cache (} plxCache::stopCache($plxShow->plxMotor->page.'home', $plxMotor);) après la fin de la boucle : endwhile;.
Comme vous avez pu le remarquer, on ne spécifie pas que le nom ('home') en paramètre, on ajoute aussi $plxShow->plxMotor->page qui est le numéro de la page courante sans quoi on verrait à toutes les pages le contenu de la première.
Attention tout les fichiers sont stockés dans le dossier plxCache, assurez-vous avec un client FTP que l'écrite s'est bien faite. Vous remarquerez que la mise en cache du fichier home.php génère un grand nombre de fichiers dans ce répertoire, un par page, à vous de voir si c'est vraiment judicieux.

Voilà, j'espère que vous avez compris le fonctionnement. Vous pouvez poser vos question en commentaire. J'espère aussi que vous avec compris qu'avec ce système c'est Wordpress qui va aller se cacher :-).

Je suggère aussi

13 commentaires

#1 lundi 11 janvier 2010 @ 11:10 Hamtaro a dit :

Peut être que le mieux, si faisable, serait de placer le fichier staticcache.php dans le dossier plugins ?
Ca change pas grand chose mais comme ça, il y a juste de l'intégration de code dans les différents thèmes, pas besoin de copier le fichier à chaque fois dans le dossier du thème que l'on choisit. ;)

#2 lundi 11 janvier 2010 @ 11:14 Hamtaro a dit :

PS : petite coquille dans ton code à coller par rapport au nom du fichier staticcache.php => tu as glissé une majuscule, staticCache.php. ;)

#3 mercredi 17 février 2010 @ 22:40 antistress a dit :

ça sera intégré par défaut à l'avenir ?

#4 mercredi 17 février 2010 @ 22:52 amoweb a dit :

@antistress : Non, il n'est pas prévu de l'intégrer (cf. http://pluxml.org/roadmap). Il est utile pour les cas extrêmes (>200 articles ou un peu moins suivent les serveur), pour mon blog c'est quasi inutile (je l'ai mis pour le tester, je ne prend pas mes lecteurs pour des cobayes !).
Par contre, j'essaierai de le mettre sous forme de plugin quand PluXml les supportera bien sûr.
L'as-tu essayé ?

#5 jeudi 18 février 2010 @ 14:17 antistress a dit :

non pas encore, mon blogue n'est pas encore assez fourni je viens de l'ouvrir sous pluxml (venant de blogger)

merci pour tes efforts

#6 mercredi 14 juillet 2010 @ 13:04 Fred a dit :

Hum vraiment sympa ton article là Amoweb.

On peux imaginer faire la même chose pour le thème ?

Car si on regarde Fluxbb il utilise ce système de cache qui le rend populaire aussi pour sa rapidité.

#7 mercredi 14 juillet 2010 @ 13:17 amoweb a dit :

@Fred : C'est à mon avis le système le plus simple pour mettre en cache. Il peut être intégré à n'importe quel thème. Fluxbb utilise ce système de cache car il génère les articles à la volée. PluXml n'a pas besoin de ce système pour les articles car ils sont envoyés et stocké comme des pages HTML.
Je pense qu'il est utilise pour PluXml à partir de 500 articles. Voir plus avec la dernière version de PluXml.

#8 mardi 17 août 2010 @ 19:43 iMeee a dit :

Effectivement ça peux être bénéfique lorsque qu'on à un certain nombre d'articles. De mon côté, pour les cas hardcore, j'avais vu une solution plus délicate mais avec des performances bien meilleures.
C'est simple à mettre en place, et sûrement pas la meilleure solution. On créé un ramdisk (sous *Nix donc), on le monte dans le repertoire data de PluXml, et on fait un script pour synchroniser le ramdisk sur le disque dur (pour garder tout en cas de coupure) et on le met en cron toutes les minutes.
C'est une solution pas vraiment adaptée en production. Faudrait voir si un système de Plug-in pourrait gérer un cache plus avancé (ram, et non fichier).

Ta solution est déjà bonne à prendre pour les pages qui ne bougent pas beaucoup tel la page d'accueil et compagnie.

#9 lundi 04 juin 2012 @ 16:22 Mohamed a dit :

Hello, merci beaucoup, j'ai gagné en performance sur la dernière version. Effectivemment j'ai dû revoir les majuscules du fichier, sinon impeccable! Merci encore !

#10 jeudi 20 septembre 2012 @ 02:42 Sentimancho a dit :

Je découvre Pluxml, et c'est pas mal en terme de vitesse (par contre trouver un bon thème c'est galère), je vais tester ton système de cache, cela n'a pas l'air trop compliqué à faire et si on gagne du temps on gagne des place. merci

#11 dimanche 13 janvier 2013 @ 02:39 Arthur a dit :

ça semble intéressant, oui... mais pas assez clair pour moi : quand tu dis "placer le code avant telle ligne" ok... mais c'est pas bien structuré et j'ai des erreurs soit avec les "?>" ou les ";)" que je ne sais pas déplacer !
Faudrait un exemple concret du home.php pour bien faire !

#12 mercredi 21 janvier 2015 @ 20:11 Pit a dit :

@amoweb : Avec un petit peu de retard, où en est le plug-in ?

#13 vendredi 23 janvier 2015 @ 17:02 Amaury Graillat a dit :

@Pit : Il n'y a pas de gros avancement. Je pense qu'une adaptation pour les versions récentes serait très facile à faire. Je n'ai pas eu le temps d'y retravailler depuis cet article.

Écrire un commentaire

Quelle est la troisième lettre du mot vhapvr ? :