Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
j'ai développé une appli architecturée autour du framework Zend. J'ai suivi les différents tutoriaux avant de me lancer et me suis appuyé sur ceux ci pour développer.
J'ai un gros problème de lenteur. Pour afficher une centaine de ligne, ça peut mettre plus de 30s. Je ne vois pas d'où ça peut venir...
Quelqu'un pourrait m'aider à optimiser tout ça ?
Merci
Pour illustrer mon problème : j'ai une table personnel avec une centaine d'enregistrements. j'ai donc un controller, un modèle et une vue. Dans mon controller, j'ai une action index qui permet d'afficher les utilisateurs :
function indexAction() { if(isset($_SESSION[APP]['user']['ROLE_ID'])){ // si c'est un paramétreur ou technique ou superuser if($_SESSION[APP]['user']['ROLE_ID'] == 4 || $_SESSION[APP]['user']['ROLE_ID'] == 5 || isset($_SESSION[APP]['acces'])){ $view = Zend_Registry::get('view') ; $view->titre = "Liste des utilisateurs de l'application" ; $view->img = "module_web_list.gif" ; $personnel = new Personnel() ; $where = '1=1'; $order = new Zend_Db_Expr('PER_NOM, PER_PRENOM'); $view->personnels = $personnel->fetchAll($where, $order) ; $view->action = 'index' ; $view->actionTemplate = 'personnel/indexPersonnel.tpl.php' ; $this->_response->setBody($view->render('site.tpl.php')) ; }else{ $this->_redirect(ROOT_URL . '/Authentification'); } }else{ $this->_redirect(ROOT_URL . '/Authentification'); } }
Dans ma vue :
foreach($this->personnels as $personnel){ traiement }
Et dans mon modèle, je décalre ma table, mon id, etc..
Je ne comprend vraiment pas pourquoi c'est aussi long.
C'est bon, je suis un boulet si je mets la création de mes objets dans la boucle, c'est normal que les performances soient médiocres.
Désolé pour le dérangement.
@ +
Dernière modification par ldims24 (25-06-2007 13:26:13)
Hors ligne
Tu peux profiler ton application sinon.
Si tu possèdes Zend Studio, un profileur est intégré.
Sinon il existe des solutions basées sur KcacheGrind et X-Debug.
Hors ligne
Tu devrais faire tes requetes au niveau de ton modèle et non de ton contrôlleur. Une fois que tu à fais ta requete dans ton modèle tu récupere les données au niveau de ton contrôlleur pour le traitement.
Il faut aussi indexer ta base de données si il y a beaucoup d'enregistrement dans ta table il serais bon de creer des index sur les champs de ta clause WHERE cela permet d'obtenir un reel gain de temps a l'éxecution de tes requetes.
Sinon utilise wincachegrind pour profiler ton application.
http://sourceforge.net/projects/wincachegrind/
Trés simple à mettre en place et tu pourra savoir ou ce qui va pas.
Hors ligne