Sujet : Nouvelle version de Hoa_Cache

Hey hey smile,

Hoa_Cache était le dernier paquetage qui ne répondait pas aux normes de Hoa concernant les paramètres et configurations. J'avais pour projet de le refaire, mais à la demande générale, je me suis pressé et je l'ai refait complètement ce week-end smile.

On commence par un petit exemple.

Plus de chaînes de caractères et d'usine (factory), maintenant c'est de l'objet pur. C'est comme ça que Hoa fonctionne, sauf que Hoa_Cache commençait à dater sad.
C'est ce que notre cher Fabien Potencier (Symfony) appelle l'injection de dépendance. Rien de nouveau sous le soleil avec le concept, je le pratique partout dans Hoa depuis un très long moment, mais on peut lui donner un nom commun maintenant smile.

Bref. Le cache est un frontend dans lequel on injecte un backend. Ainsi :

$c = new Hoa_Cache_Frontend_Output(
    new Hoa_Cache_Backend_File()
);

Ensuite on utilise les fonctionnalités présentes sur le frontend. Le backend étant rigoureusement interfacé, on n'a pas à le modifier/toucher.

Hoa_Cache a maintenant son propre fichier de configurations : hoa://Data/Etc/Configuration/HoaCache.json.
Et les caches sont par défaut générés dans hoa://Data/Variable/Cache/. Vous pouvez vous amuser avec les constantes du zFormat, c'est toujours amusant smile.

J'ai fait des tests sur Debian, Ubuntu et Mac OS X. Théoriquement, l'erreur que vous aviez devrait disparaître. J'ai un ami qui a eu une erreur sur Hoa_File (et donc possiblement sur Hoa_Cache) mais je n'ai pas réussi à la reproduire, et lui non plus. Peut-être l'ai-je corrigée sans le savoir.

D'un autre côté, en refaisant Hoa_Cache, j'ai corrigé plusieurs bugs dans Hoa_File et Hoa_Stream. Notamment des problèmes avec des manipulations "croisées" de flux. Des bugs difficilement détectables mais tout de même. J'ai bien galéré, mais c'est corrigé wink.

Vos retours ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Nouvelle version de Hoa_Cache

Hello,

Thx, je regarde ça plus tard en ce moment je suis sur un projet Oracle :s

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

3

Re : Nouvelle version de Hoa_Cache

Faut pas être déprimé comme ça, Oracle est un bel outil wink.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Nouvelle version de Hoa_Cache

Hey,

Je m'en sert un petit peu pour test (pas de grand changements, parceque pas de gros calculs de bdd remplies etc...
Mais par contre je ne sais pas trop comment m'en servir correctement...

Actuellement je m'en sert sur le controlleur frontal:

$cache = new Hoa_Cache_Frontend_Output(
    new Hoa_Cache_Backend_File()
);



try {

    if($cache->start(md5($_SERVER['REQUEST_URI']))) {


        $controller->dispatch();
        

        echo "<!-- Fichier généré le ".date('d/m/Y à H:i:s', time())." -->";
     
        $cache->end();
    }
}

C'est un peu bourrin je l'accorde... hmm
Et pour cause, je souhaiterais par exemple ne pas mettre en cache un module en particulier (puisque backend, pas beaucoup visité et trop d'actions à gérer etc...)...
Dans cette configuration ça n'est pas possible hmm

J'ai deux solutions à priori:
1- rester en Frontend "output", et déplacer le start() et le end() au niveau du gabarit "Front.phtml"
2- passer en mode "Class", et mettre en Cache seulement les classes/modules voulues...

Qu'est-ce qui semble le mieux?

5

Re : Nouvelle version de Hoa_Cache

Hey smile,

Déplacer plus bas la mise en cache me paraît nécessaire. Après, entre la placer dans les contrôleurs ou les vues … hmm. Théoriquement, on devrait se placer dans les contrôleurs. Ça me semble plus logique. Il faudrait autour du rendu de la vue :

if($cache->start('foobar')) {

    echo $this->view->render();
    $cache->end();
}

Ça me semble le plus aproprié car la vue doit contenir le moins de code possible. Et si on déplace la vue, on déplacera le cache avec. Pas ultra pratique. Avec le contrôleur, on contrôle (huhu …) tout justement.

C'est mon avis mais je comprendrais tout à fait qu'on choississe l'autre.

C'est une très bonne question smile.

Petites notes : pas besoin de faire un md5 sur l'identifiant du cache, ce sera fait plus bas. Il vaudrait mieux que tu donnes un identifiant clair pour toi. Sachant que — par défaut — seront ajoutés les tableaux $_GET, $_POST, $_SERVER, $_COOKIE, $_FILES etc. (je ne me souviens plus exactement, voir les paramètres/configurations de Hoa_Cache pour la branche make_id_with.*). Donc un bête :

if($cache->start('main')) {

    Hoa_Controller_Front::getInstance()->dispatch();
    $cache->end();
}

serait suffisant en soit smile. On aura un cache par page visitable du site. C'est la meilleure façon de mettre en cache tout le site/application.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Nouvelle version de Hoa_Cache

Hey,

J'ai un petit soucis

J'ai ajouter le fichier de conf Hoa_cache.json et j'ai repris la nouvelle librairie du cache et je n'arrive toujours pas à faire marcher le cache.

mon problème est :

Uncaught exception: Hoa_File_Write::open: (0) File does not exist. in C:\wamp\www\_iZite\Framework\Library\File\Write.php at 119.


Ça doit être comment avant, il ne trouve pas le fichier de cache qu'il devrait créé.

J'ai rien modifié dans Hoa_Cache il pointe bien vers hoa://Data/Variable/Cache/

       $site = new Site();

        $cacheMenu = new Hoa_Cache_Frontend_Class(
            new Hoa_Cache_Backend_File()
        );
        $menu = $cacheMenu->setCacheObject($site)->htmlMenu();
" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

Re : Nouvelle version de Hoa_Cache

Ok pour descendre le tout des les controlleurs, ça me parait plus logique, et ça permettra du coup d'être plus fin dans mes config!
Par contre le coup du md5(), je l'ai fait, justement parceque toutes mes pages était les même si je ne le faisait pas hmm

Voici pour ma config:

xxx@xxx-laptop:~/Developpement/Hoa_Framework/Data/Bin$ ./hoa configuration:view HoaCache
Keywords

    id => 

Parameters

    lifetime                     => 3600                    
    serialize_content            => 1                       
    make_id_with.get             => 1                       
    make_id_with.post            => 1                       
    make_id_with.cookie          => 1                       
    make_id_with.session         => 1                       
    make_id_with.files           => 1                       
    apc                          =>                         
    eaccelerator                 =>                         
    file.cache.directory         => hoa://Data/Variable/Cache/
    file.cache.file              => (:id:).ca               
    file.compress.active         => 1                       
    file.compress.level          => 9                       
    memcache.compress.active     => 1                       
    memcache.database.host       => 127.0.0.1               
    memcache.database.port       => 11211                   
    memcache.database.persistent => 1                       
    sqlite.cache.directory       => hoa://Data/Variable/Cache/
    sqlite.cache.file            => Cache.db                
    sqlite.database.host         => 127.0.0.1               
    xcache                       =>                         
    zendplatform                 =>                         

Re : Nouvelle version de Hoa_Cache

@Ecureuil Virtuel : tu as re-tapé la commande:

hoa configuration:cache

?

Dernière fois dit par jojolapine (16 Mar. 2010 21:45)

Re : Nouvelle version de Hoa_Cache

Zut, j'avais oublié mais j'ai toujours le même problème donc le problème vient avant

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

10

Re : Nouvelle version de Hoa_Cache

Après réflexion,
Il semble normal que pour moi, ça ne fonctionne pas le coup des  GET gérés automatiquement, puisque j'utilise la réécriture d'url.
Du coup je suis obligé de construire moi même l'identifiant.
Par contre je ne vois pas du coup comment faire pour supprimer le cache d'une action donnée, vu qu'elle aura plusieurs identifiants (selon la page visionnée par exemple).

Et je trouve ça un peu lourd de faire:

    public function FooAction(){
        
        $cache = new Hoa_Cache_Frontend_Output(
            new Hoa_Cache_Backend_File()
        );
        
        if($cache->start('Index/Foo')) {        
        
            // traitement
            
            echo "<!-- Fichier généré le ".date('d/m/Y à H:i:s', time())." -->";
            $cache->end();
        }
    }    

        public function BarAction(){
        
        $cache = new Hoa_Cache_Frontend_Output(
            new Hoa_Cache_Backend_File()
        );
        
        if($cache->start('Index/Bar')) {        
        
            // traitement
            
            echo "<!-- Fichier généré le ".date('d/m/Y à H:i:s', time())." -->";
            $cache->end();
        }
    }

N'y aurait-il pas moyen de rendre ça un peu plus digest?