Derniers articles

Catégories

Bash Jquery Linux php PluXml Proxy Raspberry Pi ssh Tools Tunnel Unix

Du cache pour PluXml

11 octobre 2012

PLuXml est vraiment très rapide. Mais sur un mini pc à base d'arm rien n'est jamais asser léger. Un cache des parties les plus lourdes à calculer parait logique.

La fonction ob_start() de php est parfaite pour cela. Les scripts de créations de cache ne manques pas et on ne va donc pas réinventer la roue. Un script trouver sur amoweb.fr fait exactement ce que je cherche, ne reste plus qu'à l'intégrer à PluXml.

Voici pour commencer le fichier staticcache.php que l'on va utiliser. Posé le dans le dossier racine de PluXml.

<?php

if(!@opendir(PLX_ROOT.'plxCache/')) mkdir(PLX_ROOT.'plxCache/');

class plxCache
{	
	//Trouver une technique pour trouve s'il y a eu une modification
	function startCache($name, $plxMotor)
	{
		//Génère un nom de fichier pour la cache, variable en fonction de modifications :
		$filecache = filemtime(PLX_ROOT.$plxMotor->aConf['racine_commentaires'])
								. '-' . filemtime(PLX_ROOT.$plxMotor->aConf['racine_articles']) . '_' . $name . '_cache.tmp';

		//Le fichier cache existe déjà on l'affiche
		if(file_exists(PLX_ROOT.'plxCache/'.$filecache))
		{
		    $cache = fopen(PLX_ROOT.'plxCache/'.$filecache,"r");
		    while (!feof($cache)) echo fgets($cache, 2048);
		    fclose($cache);
			return 0;
		}
		else
		{
			//On supprime l'ancien fichier cache :
			$filesCache = glob(PLX_ROOT.'plxCache/*_'. $name . '_cache.tmp', GLOB_MARK );
			foreach($filesCache as $fileToDelete ) {@unlink($fileToDelete);}
			
			//On lance la caching		
        	ob_start();
			return 1;
		}
	}

	function stopCache($name, $plxMotor)
	{
		$filecache = filemtime(PLX_ROOT.$plxMotor->aConf['racine_commentaires'])
								. '-' . filemtime(PLX_ROOT.$plxMotor->aConf['racine_articles']) . '_' . $name . '_cache.tmp';

		//Le fichier existe déjà, il a donc déjà été affiché :
		if(file_exists(PLX_ROOT.'plxCache/'.$filecache)) return;

		//On récupère le contenu du cache
		$cachecontent = ob_get_contents();
        ob_end_clean();
		//On affiche le cache
        echo $cachecontent;
		//On sauvegarde le cache dans un fichier
        $cache = fopen(PLX_ROOT.'plxCache/'.$filecache, "w");
        fwrite($cache, $cachecontent);
        fclose($cache);
		
	}
}
?>

Il faut maintenant l'intégrer dans notre site, les parties les plus lourdes à calculer sont les listes des articles des pages home, tag, catégorie. Il me parait également interressant de conserver en cache le menu

Pour les pages home, tags et catégories l'intégration est vraiment simple, il faut juste se veiller à ce qu'il y ai un cache pour chaque numéro de page (pagination). Voici un exemple d'intégration dans le fichier home.php de mon template.

Lire la suite de Du cache pour PluXml

Classé dans : Accueil, Divers - Mots clés : PluXml, php - aucun commentaire

Derniers articles

Catégories

Archives