Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-08-2009 16:41:00

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

[zf 1.9]Zend_Cache + zend_table_abstract + zend_paginator = bug

Bonjours,
dans le souci d'améliorer les performances de mon site, j'essai de mettre en cache les plus grosses requêtes et justement ce sont celles que je pagine.
Le problème c'est que, quand j'essai d'accéder à ma page quand la requête a été mise en cache, j'ai une erreur disant que je passe pas un objet SELECT.
J'avais lu qu'il y avait des histoires de sérialisation, désérialisation avec le Zend_Cache, est-ce que sa en ferait parti?

Merci bien ^^

Hors ligne

 

#2 10-08-2009 21:06:04

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

Re: [zf 1.9]Zend_Cache + zend_table_abstract + zend_paginator = bug

Tu peux nous envoyer un extrait de ton code ?

A+, Philippe


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

Hors ligne

 

#3 11-08-2009 09:39:49

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [zf 1.9]Zend_Cache + zend_table_abstract + zend_paginator = bug

Si je comprends bien, tu essayes de mettre le résultat de ton select en cache ? Si c'est ça, tu dois surement avoir un problème de dé-sérialization en effet. Quand tu récupère ton cache, tu ne dois pas avoir ton objet sous sa forme d'origine.
Moi par habitude, je met plutôt en cache les rendus ( donc de l'HTML ).

C'est vrai qu'avec ton code on pourrait t'aider plus facilement.

Hors ligne

 

#4 11-08-2009 11:30:33

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: [zf 1.9]Zend_Cache + zend_table_abstract + zend_paginator = bug

oki, je pouvais pas l'envoyer hier soir. Pas sur le bon pc.

Voici le code et effectivement il s'agit bien de l'objet select que je met directement en cache:

Code:

$listenews = App_Cache::get('newssite');
        
if(!$listenews)
{
    $tablenews = new News_Models_Tables_News();
    $listenews = $tablenews->fetchAll(null, 'date_news DESC');
    App_Cache::set($listenews, 'newssite');
}
        
$page = Zend_Paginator::factory($listenews);                            
$page->setPageRange(7);                                                
$page->setCurrentPageNumber($this->_getParam('page', 1));
$page->setItemCountPerPage($this->_getParam('par', 10));
$this->view->news = $page;

Hors ligne

 

#5 13-08-2009 22:40:11

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: [zf 1.9]Zend_Cache + zend_table_abstract + zend_paginator = bug

je relance le sujet en espérant que quelqu'un veuille bien répondre

Hors ligne

 

#6 14-08-2009 09:43:19

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [zf 1.9]Zend_Cache + zend_table_abstract + zend_paginator = bug

Hello,

Et si tu remplaces

Code:

$listenews = $tablenews->fetchAll(null, 'date_news DESC');

par

Code:

$listenews = $tablenews->fetchAll(null, 'date_news DESC')->toArray();

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#7 14-08-2009 10:24:14

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: [zf 1.9]Zend_Cache + zend_table_abstract + zend_paginator = bug

A mon avis, tu optimises à l'envers... smile

Ce qui prend du temps, lors d'une requête SQL, c'est pas son exécution, car MySQL par exemple dispose d'un cache performant. Donc si tu passes 2x la même requête, la deuxième fois, tu obtiendras tes informations instantanément ou presque.

Ce qui prend du temps, c'est le transfert des données entre le serveur web et le serveur DB et le traitement et l'affichage des données. Donc ton cache sert uniquement à éviter le transport des données et l'exécution de la requête (qui ne consomme rien).

Dans ton code, les pertes de performances sont plutôt sur la manière dont tu passes ta requête. Tu récupères toutes les données de ta table pour en utiliser que 10. Imagines que ta table contient 1 million de lignes, c'est catastrophique, sans compter que tu affiches peut être que quelques colonnes alors que tu les récupères toutes.

Et peut être le traitement de ces lignes est à optimiser car l'utilisation des getter et setter des objets Zend est très peu performant.

Bref, à mon avis, avant d'utiliser un cache, tu as encore un peu de travail à faire sur le code. smile

Pour ce faire, tu crées une requête SELECT (Zend_Db_Table_Select je crois) et tu la passes directement dans le paginator qui lui se fera un plaisir d'y ajouter des "LIMIT x,y" AVANT de l'exécuter. Donc au final, tu récupèreras que les données dont tu as besoin. Egalement, tu spécifies dans ta requête SELECT les colonnes dont tu as besoin afin de ne pas récupérer de données inutiles.

Après ça, je suis sûr que tu n'auras plus besoin de cache sur ta requête mais comme dit plus haut, plutôt sur l'affichage. smile

Dernière modification par keilnoth (14-08-2009 10:28:01)


Quelques tutoriaux Zend Framework !

Hors ligne

 

#8 27-08-2009 20:25:18

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: [zf 1.9]Zend_Cache + zend_table_abstract + zend_paginator = bug

j'ai mis ceci en pratique et on ressent bien la différence. Par contre, comment tu met en cache l'affichage?

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