Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Je fais fasse actuellement à un problème de performance.
Je génère un tableau HTML assez basique contenant environ 850 éléments. Lors de la génération, je fais appel à Zend_Date et à Zend_Currency pour afficher respectivement une date et un montant par ligne.
J'utilise les mêmes instances et procède juste à une modification via « $date->set() » et « $currency->setValue() ».
Si j'utilise ces deux modules, j'obtiens une génération en 8.5 secondes.
Si je désactive Zend_Date (affichage direct de la date), j'obtiens 4.5 secondes.
Et enfin, si je désactive de la même façon Zend_Currency (utilisé 2 fois pour deux montants par ligne), j'obtiens 1 secondes.
J'ai activé les caches de cette manière :
[lang=php] $cache = Zend_Cache::factory('Core', 'File', array('automatic_serialization' => true), array('cache_dir' => realpath(APPLICATION_PATH.'/../var/tmp')) ); $cache->clean(Zend_Cache::CLEANING_MODE_OLD); Zend_Registry::set('Zend_Cache', $cache); Zend_Locale::setCache($cache); $locale = new Zend_Locale("fr_FR"); Zend_Registry::set('Zend_Locale', $locale); Zend_Db_Table_Abstract::setDefaultMetadataCache($cache); Zend_Currency::setCache($cache);
J'aimerai savoir s'il n'y a rien d'autre à faire pour améliorer les performances de ces modules ?
Hors ligne
Salut,
Tu peux définir un cache pour Zend_Date :
Zend_Date::setOptions(array('cache' => $cache));
Ca le mettra automatique sur ta locale au passage apparement.
Zend_Locale_Data::setCache($value);
Je ne sais pas si c'est volontaire de ne pas avoir défini de durée de vie à ton cache.
Tu peux utiliser la propriété automatic_cleaning_factor pour supprimer le cache invalide toutes les x écritures plutôt que de faire un cleaning mode old à chaque appel de ta page. (A voir niveau performance).
Tu peux aussi utiliser le cache mémoire qui sera plus performant.
J'ai pas trop d'autres idées par rapport à ce bout de code (ne pas utiliser Zend_Date ? ). Essaye de regarder avec xDebug ou autre à quels endroits tu passes le plus de temps et optimise juste ces endroits là. 1ms où tu passes 1000 fois, c'est 1 seconde de gagnée.
Sujet intéressant en tout cas et j'ai hâte de voir d'autres réponses
++
Hors ligne
En fait, dans ce cas, je me dis que le cache n'a pas d'importance. Une fois un Zend_Cache (ou autre) instancié une première fois, en théorie, le cache a été chargé en mémoire (RAM).
Est-ce qu'un accès disque est effectué à chaque appel à la méthode "->set" ?
J'avoue ne pas avoir examiné en profondeur le fonctionnement du cache avec ces modules.
Pour moi, le cache a une importance pour chaque requête effectuée. En l'occurrence ici, c'est dans une boucle que ça "rame".
Je pense me passer de Zend_Date. Mais pour Zend_Currency, ça n’embête un peu plus.
Hors ligne
Pages: 1