Ressources Spip-Agora Clever Age

La nouvelle gestion du CACHE, le 10 novembre 2004

Jusqu’à présent les fonctionnalités de personnalisation de SPIP-Agora souffrent des faibles performances proposées.
L’identification du cache de SPIP-Agora se basant sur :
- le nom du squelette
- paramètres HTTP
La personnalisation contraint les webmestres à fixer un délai à 0 secondes sur les squelettes faisant appel à ces fonctions. C’est à dire qu’aucune des pages HTML générées n’est stockée pour ne pas fournir à un utilisateur une page destinée à un autre. Le calcul des squelettes se fait donc à chaque requête utilisateur.
Pour remédier à cette faiblesse, le cache de SPIP-Agora doit être capable de gérer un cache html pour chaque utilisateur. Il doit donc être capable de prendre en compte l’identifiant de l’utilisateur connecté.
C’est ce que propose le nouveau module du cache disponible depuis la version 1.2.2 beta 3.

Design retenu

Pour satisfaire à cette contrainte, j’ai choisi une approche basée sur la notion de "groupe de cache". Dans notre cas les groupes suivants sont définis :

- pour un squelette classique : nom_du_squelette
- pour un squelette de personnalisation : id_auteur,nom_du_squelette

Ce choix nous facilite par la suite la manipulation et la maintenance du cache afin de :
- Supprimer l’ensemble du cache
- Supprimer le cache de personnalisation d’une personne
- forcer le recalcul du cache de personnalisation d’une personne
- Supprimer le CACHE associé à un squelette

La notion de Container est également utilisée pour offrir aux webmestres le choix du type de support du cache et sa configuration (actuellement seul un support sur fichier est proposé avec la possibilité de configurer son répertoire de stockage).


CacheHTMLdia 

 - 49.8 ko

CacheHTMLdia

Diagramme de classe

L’implémentation

Les fichiers du module se trouvent dans l’arborescence suivante :

  • agora/ecrire/include/cacheHTML
    • CacheHTML.php Ce fichier définit les propriétés du cache HTML de SPIP-Agora
    • inc_cacheHTML_factory.php Ce fichier propose la fonction "fabrique" permettant d’instancier un objet cache standard ou un objet cache de personnalisation.
    • inc_config_cache.php Ce fichier permet de paramètrer le module. On peut définir et paramétrer le type de container à utiliser.
      <?php

      /*Support physique du CACHE HTML de SPIP-Agora. Seul l'option 'File' est disponible.*/

      $containerType 'File';

      $containerParams = array();

      // Définition du répertoire de stockage du CACHE ici dans /tmp
      $containerParams['cacheHTML_directory'] = '/tmp';

      ?>

    • common/
      • PersonnalisationCacheHTML_common.php : Ce fichier propose une implémentation du cache pour les pages utilisant des fonctionnalités de personnalisation.
      • StandardCacheHTML_common.php : Ce fichier propose une implémentation du cache pour les pages classiques.
    • agora/ecrire/include/cacheHTML/container
      • Container.php Ce fichier définit les propriètés d’un container.
      • FileContainer.php Ce fichier propose une implémentation d’un container pour système de fichier.

Exemple d’utilisation du cache


<?php
// On souhaite stocker $data dans le cache
$data 'mes données à mettre en cache';

// Récupération d'une instance d'un objet pour gérer un cache classique
$cacheHTML = &recuperer_instance_cacheHTML('article'$GLOBALS['HTTP_GET_VARS'], $GLOBALS['HTTP_POST_VARS'], 3600);

// On teste si un cache valide est disponible
if (!$cacheHTML->useCache()) {
    
// Le cache n'est pas disponible, on le créé
    
$cacheHTML->save($data);
}
// On charge le cache
$out $cacheHTML->load();

// On afficher le contenu du cache
echo $out;
?>

Explications :


$cacheHTML = &recuperer_instance_cacheHTML('article', $GLOBALS['HTTP_GET_VARS'], $GLOBALS['HTTP_POST_VARS'], 3600);

Cette ligne permet de récupérer une instance permettant de gérer un cache html classique.

- ’article’ correspond à la requête. C’est à dire qu’on demande un objet cache chargé de remonter le cache souhaité. Dans SPIP-Agora ce paramètre correspond au $fond c’est à dire à un squelette.

- $GLOBALS[’HTTP_GET_VARS’] et $GLOBALS[’HTTP_POST_VARS’] sont utilisés pour identifier le cache à remonter.

- 3600 correspond au délai de validité du cache.

Dans le cas d’un cache avec personnalisation, on utilise les paramètres suivants :


$cacheHTML = &recuperer_instance_cacheHTML('article', $GLOBALS['HTTP_GET_VARS'], $GLOBALS['HTTP_POST_VARS'], 3600, true, $GLOBALS['auteur_session']['id_auteur']);

2 nouveaux paramètres sont utilisés :

- true signifie qu’un objet cache de personnalisation est demandé

- $GLOBALS[’auteur_session’][’id_auteur’] Le cache de personnalisation sera basé sur l’identifiant de l’auteur connecté.

Ce qu’il faut retenir !

Outre les performances améliorées sur les pages de personnalisation , quelques nouveautés sont à citer :

  • La variable $recalcul_personnalisation agit comme la variable $recalcul mais ne se limite qu’au recalcul des pages de personnalisation.
  • Il est nécessaire de déclarer dans le .php3 de définition d’un squelette, la variable $personnalisation = true ;
  • L’organisation du cache HTML sur le disque a été revue. A présent le cache HTML est stocké dans l’arborescence de fichiers suivante :
    • CACHE/nom_squelette/valeur_hexa/nom_cache_html
    • CACHE/perso/id_auteur/nom_squelette/valeur_hexa/nom_cache_html

[BD_referer_mysql DB_referer : addArticleReferer()] DB Error: syntax errorINSERT INTO support_referers_articles (date_heure, referer, referer_md5, id_article, visites, maj) VALUES ('2008-07-25','http://www.aolrecherche.aol.fr/rech?enc=iso&p=wf&q=qu'est%20ce%20que%20les%20ressources%20utilisateurs%20sont%20faibles','0x4892bb210895cde6',61,1,'2008-07-25 22:00:01')