Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-11-2008 02:30:54

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

[Résolu] Zend_Cache : Problème de conception

Bonjour,

Je suis en train de finir un site avec ZF et je cherche à l'optimiser avec Zend_Cache. Cependant, je me retrouve à des choix à faire en terme de programmation.

j'ai par exemple une liste de news à afficher. En PHP, avec Zend_DB, je fais la requête puis une boucle foreach, puis j'effectue le rendu en passant mon tableau de données à Smarty.

Code:

$table = new Table_News();
$rowset = $table->fetchAll();

if ($rowset->valid())
{
   foreach ($rowset as $uneNews)
   {
        $data[] = array(
           'id_news' => $uneNews->id_news, 
           ....
        );
    }
}

// Rendu
$view->assign('data', data);
$xhtml = $view->render('news.tpl');
echo $xhtml;

news.tpl

Code:

{foreach from=$data item=uneNews}

    // Code XHTML d'une news
    <div class="news">
           .....
    </div>

{/foreach}

Comment utiliser Zend_Cache dans ce processus ? J'ai deux choix :
#1

Code:

$table = new Table_News();
$rowset = $table->fetchAll();

if (! $xhtml = $cache->load('news'))
{
     if ($rowset->valid())
     {
          foreach ($rowset as $uneNews)
          {
                $data[] = array(
                     'id_news' => $uneNews->id_news, 
                      ....
                );
           }
     }

     // Rendu
     $view->assign('data', data); 
     $xhtml = $view->render('news.tpl');

     // Mise en cache
     $cache->save($xhtml)
}
echo $xhtml;

news.tpl ne change pas.

#2

Code:

$table = new Table_News();
$rowset = $table->fetchAll();

if ($rowset->valid())
{
   foreach ($rowset as $uneNews)
   {
        if (! $news = $cache->load('news' . $uneNews->id_news))
        {
                $view->assign('id_news', $uneNews->id_news);
                $view->assign('titre', $uneNews->titre);
                $view->assign('contenu', $uneNews->contenu);
                ....
                // Rendu
                $news = $view->render('news;tpl');

                // Mise en cache
                $cache->save($news);
        }
        $xhtml .= $news;
    }
}

// Rendu
echo $xhtml;

Avec news.tpl :

Code:

<div class="news">
     {$titre} : {$contenu}
     ...
</div>

Il y a des différences de boucles PHP/Smarty dans les deux cas. Laquelle choisir / est la mieux optimisée selon vous ?

Merci wink

Dernière modification par ALkyD (22-11-2008 17:46:50)

Hors ligne

 

#2 15-11-2008 09:50:22

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu] Zend_Cache : Problème de conception

Bonjour,

J'ai tendance à penser qu'un système de cache ne doit pas affecter la vue donc plutôt solution 1.

Par ailleurs ta solution 2 multiplie le nombre de données en cache, ce qui n'est jamais souhaitable. Si on pousse le truc à l'extrème, quand tu as autant de données dans ton cache que dans ta base, c'est à peu près sur que ton cache n'ira pas plus vite que ta base....

Sinon dans ton exemple #1, la ligne $rowset = $table->fetchAll(); doit être à l'intérieur de ton if, sinon tu perds l'intérêt du cache smile

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 15-11-2008 11:56:11

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: [Résolu] Zend_Cache : Problème de conception

J'ai également pensé à la solution n°1 mais l'inconvénient est que si je fais la moindre petite mise à jour pour une news, je suis obligé de détruire le cache, et donc la liste de toutes les news pour le recréer. Avec la 2ème solution, il "suffit" de supprimer le cache de la news correspondante.

Je gère également la pagination : 15 news par page, ce qui m'oblige à passer le numéro de page dans l'identifiant du cache, et donc à détruire tous les caches correspondants en cas de MAJ.

J'ai le même problème avec les commentaires des news. Pour chaque news il est possible d'ajouter des commentaires (comme dans un blog classique). Là encore je ne sais pas quelle solution prendre, car si je suppose que de nouveaux commentaires sont ajoutés de façon régulière, le cache de liste des commentaires est sans cesse recrée à chaque ajout...

Hors ligne

 

#4 16-11-2008 10:39:39

nick
Membre
Date d'inscription: 31-05-2008
Messages: 84

Re: [Résolu] Zend_Cache : Problème de conception

Ce n'est pas gênant surtout si ton invalidation de cache est bien ciblé.
Le cache d'une page est rapide à générer, ce qu'il faut éviter c'est l'invalidation complète des caches.

Hors ligne

 

#5 17-11-2008 09:04:30

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu] Zend_Cache : Problème de conception

Tu n'auras à mon avis jamais de problème de perf sur des mises à jours je pense. Les problèmes viennent toujours du nombre de lecteur, jamais du nombre de contributeur (à moins que tu fasses un twitter, mais tu nous l'aurais dit)...

Mon opinion, c'est qu'il faut vraiment optimiser la lecture et pas l'écriture, le nombre d'écriture étant en général complètement négligeable... (cela dit, ça dépend quand même un peu de ton site effectivement...)

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 19-11-2008 14:24:44

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: [Résolu] Zend_Cache : Problème de conception

J'ai tout de même décidé de cacher les news/commentaires un par un plutôt que la liste entière. Par contre pour le livre d'or que je vais implémenter, je vais cacher toute la liste. Je pense que je me rendrais compte des performances à long terme de chaque solultion car cela dépend de la fréquence des mises à jour / nombre de visiteurs.

Merci pour vos réponses wink

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages