Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je viens de finir le backoffice d'un site de vente en ligne et je m'inquiete des perf, car en arrivant juste sur la page de login, la page met 0.30s à s'afficher (en local).
Quelqu'soit la page je ne descend jamais en dessous des 0.30s (0.20s avec zend optimiser)
Pour info j'utilise l'autoload, j'ai essayé de profiler avec xdebug il m'affiche 32ms en culmulative time, ce qui est très lojn de mes 300ms.
Ai je oublié quelquechose avec xdebug?
Avez vous des performances similaires ? ou ai-je vraiment un problème de performance?
Merci d'avance.
Hors ligne
Je vais peut être dire une bêtise, mais cela reste 1/3 de seconde, ce n'est pas énorme non plus...
Et sur des requêtes plus compliquées dans le Back Office tu arrives à des délais plus significatifs ?
Cordialement,
Hors ligne
Oui quand je fais des formulaires multi-enregistrements (multi insertions par ex) avec zend_form j'arrive bien à 3s dès fois.
Et 1/3s c'est énorme je trouve pour un écran qui ne fais aucune requète
Et c'est pas vraiment les requetes qui me bouffent du temp , par ex, sur une page :
Exécution de 14 requètes en 0.019326686859131 secondes
Temps moyen : 0.0013804776327951 secondes
Dernière modification par sebondus (26-06-2008 10:46:09)
Hors ligne
il m'est arrivé ca sur une page, j'était a 4 sec...
C'était tout simplement une instanciation et des acces à un Zend_Date qui faisait laguer...
Une bonne dose d'optimisation du code et je suis descendu à moins de 1 sec (page lourde tout de meme )
Essaye de faire des debugs du temps écoulé pr afficher la page à différents endroits, tu va vite trouver a mon avis(et apres tu te dira : "Ah ba oui ! " )
Hors ligne
Bon j'ai fais quelques test, c'est uniquement mon bootstrap qui ralenti tout, le dispatch lui prends 0.10s max
Rien que ça , ça mets 0.15s - 0.20s à être exécuté...
<?php // -- Paramètrage de l'environnement define('ENV', 'dev'); // Développement // -- Gestion des erreurs error_reporting(E_ALL); ini_set('display_error', 'On'); setlocale(LC_ALL, 'fr_FR') ; date_default_timezone_set('Europe/Paris'); // -- Configuration des chemins par défaut $include_path[] = '.'; $include_path[] = 'lib'; $include_path[] = 'models'; $include_path[] = get_include_path(); set_include_path(join(PATH_SEPARATOR, $include_path)); // -- Démarrage de l'autoload include "Zend/Loader.php"; Zend_Loader::registerAutoload(); // -- Paramétrage de la sécurité require 'conf/MyAuth.php'; require 'conf/MyAcl.php'; require 'conf/MyDebug.php'; // -- Paramétrage du cache $frontendOptions = array('automatic_serialization' => true); $backendOptions = array('cache_dir' => '.cache'); $cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); Zend_Db_Table_Abstract::setDefaultMetadataCache($cache); $auth = Zend_Auth::getInstance(); // Authentification $acl = new MyAcl($auth); // Droits d'accès Zend_Registry::set("ACL", $acl); // Stockage en registre // -- Chargement du fichier de configuration $config = new Zend_Config_Ini('conf/conf.ini', strtolower(ENV)); // -- Paramétrage de la localisation et des langues if(!$translate = $cache->load('translate')) { $translate = new Zend_Translate('gettext', 'language/fr.mo', 'fr'); $cache->save($translate,'translate'); } if(!$translate_err = $cache->load('translate_err')) { $translate_err = new Zend_Translate('array', 'language/errors_fr.php', 'fr'); $cache->save($translate_err,'translate_err'); } Zend_Registry::set('TRANSLATE', $translate); // Stockage en registre Zend_Registry::set('TRANSLATE_ERRORS', $translate_err); // Stockage en registre // -- Paramétrage de la base de données $db = MyZend_Db::factory($config->db->adapter, $config->db->config->toArray()); Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('DB', $db); // -- Paramètrage des journaux de log $logger = new Zend_Log(); $logger->addWriter(new Zend_Log_Writer_Stream(sprintf($config->log->file, date('Ymd')))); Zend_Registry::set('LOGGER', $logger); // -- Initialisation Zend_Layout's MVC helpers Zend_Layout::startMvc(array('layoutPath' => 'views/layouts')); // -- Enregistrement des helpers $view = new MyZend_View(array('translate' => $translate)); $view->setEncoding('UTF-8'); $view->addHelperPath('views/helpers/'); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $viewRenderer->setView($view); // -- Configuration du Contrôleur Zend $frontController = Zend_Controller_Front::getInstance(); $frontController->setControllerDirectory('controllers'); $frontController->throwExceptions(true); $frontController->registerPlugin(new MyAuth($auth, $acl)); $frontController->registerPlugin(new MyDebug($benchmark)); $frontController->setParam('auth', $auth); // EXECUTION DE L'APPLICATION try { // Aiguillage vers le contrôleur $frontController->dispatch(); } catch (Exception $e) // Récupération de toute exception { }
Que pourrais-je faire pour améliorer tout ça?
Dernière modification par sebondus (26-06-2008 14:56:40)
Hors ligne
Bonjour,
As-tu essayé un booster comme xcache ?
Hors ligne
Tu me conseilles quoi avant de me lancer ? xcache?
EDIT: si j'utilise zend_optimiser
Dernière modification par sebondus (26-06-2008 11:17:45)
Hors ligne
On l'a installé ces jours-ci sur nos serveurs de prods pour améliorer le load average (uptime) lors des pointes de traffic, je n'ai pas de recul mais ça peut déjà aider.
Hors ligne
Sebondus,
j'ai fait quelques tests sur la différence entre le Zend_Autoloader et require_once dans le bootstrap, rien de notable réellement
Pour info (wamp + zf 1.5.2):
[RECHARGEMENT SIMPLE DE LA PAGE - Lancé 10 fois]
Moyennes des 'require_once'
65,07 ms
Moyennes des 'autoload'
65,04 ms
[VIDAGE DU CACHE + RECHARGEMENT DE LA PAGE - Lancé 10 fois]
Moyennes des 'require_once'
63,13 ms
Moyennes des 'autoload'
68,69 ms
Voilà, rien de flagrant en tout cas...
Hors ligne
Je viens de tester xcache, j'ai de meilleures perfs avec zend_optimiser.
Hors ligne
Sinon, essaie de tester ton site sans utiliser les Acls... Je n'ai pas l'impression que tu mets en cache/session les éléments qui pourraient se charger qu'une fois durant la session d'un utilisateur.
Hors ligne
Tu peux tester d'autres outils : PHP Accelerators : APC vs Zend vs XCache with Zend Framework
Hors ligne
Attention, un bench sous Windows n'est pas représentatif.
As tu essayé ton bench sous Linux ?
Essaye des outils comme Vallgrind ou CallGrind sous Linux, mais attention, c'est du bas niveau ....
Hors ligne
sballeste a écrit:
Tu peux tester d'autres outils : PHP Accelerators : APC vs Zend vs XCache with Zend Framework
J'ai pas testé mais en tout cas cette article est puant.
On ne connait pas du tout sa procédure de test, ses résultats ne veulent rien dire.
whitespirit a écrit:
Sinon, essaie de tester ton site sans utiliser les Acls... Je n'ai pas l'impression que tu mets en cache/session les éléments qui pourraient se charger qu'une fois durant la session d'un utilisateur.
En effet, si j'ai bien compris les ACL on les fout en session.
Par contre je vois pas trop comment mettre le reste de mon bootstrap en cache.
EDIT: j'ai déja mis les traductions en cache mais bon ce que je gagne est ridicule .. (0.02s à 0.03s)
// -- Paramétrage de la localisation et des langues if(!$translate = $cache->load('translate')) { $translate = new Zend_Translate('gettext', 'language/fr.mo', 'fr'); $cache->save($translate,'translate'); } if(!$translate_err = $cache->load('translate_err')) { $translate_err = new Zend_Translate('array', 'language/errors_fr.php', 'fr'); $cache->save($translate_err,'translate_err'); }
Julien a écrit:
Attention, un bench sous Windows n'est pas représentatif.
As tu essayé ton bench sous Linux ?
Essaye des outils comme Vallgrind ou CallGrind sous Linux, mais attention, c'est du bas niveau ....
Non étant donné que le serveur ou sera hébergée l'appli sera sous windows.
Dernière modification par sebondus (26-06-2008 14:04:18)
Hors ligne
Bonjour sebondus,
si tu as une install de wamp c'est facile d'y ajouter APC car il suffit juste de selectionner l'extension (php_apc)
Il faut savoir que php commence par parser le source puis de le transformer en byte code. Ce qui rend le zend framework gourmand si on n'utilise pas de cache d' "opcode".
Fait un test vite fait ca te prendra pas longtemps.
Hors ligne
@ichevc02 : quel version de wamp utilises tu ? Moi je n'ai pas APC dans la liste de mes extensions.
Il faut la rajouter manuellement je suppose ?
Dernière modification par elkolonel (26-06-2008 14:25:50)
Hors ligne
j'utilise wamp 2.0.
Apc apparait bien dans mon menu déroulant des extensions.
Dernière modification par ichevc02 (26-06-2008 14:34:38)
Hors ligne
Je viens de tester, j'ai rien de mieux qu'avec zend_optimiser.
Xcache et APC donnent les mêmes résultats à peu pret, zned_optimiser fais mieux que les deux autres.
Dernière modification par sebondus (26-06-2008 14:32:58)
Hors ligne
ichevc02 a écrit:
j'utilise wamp 2.0.
Apc apparait bien dans mon menu déroulant des extensions.
Ok, je regarderai pourquoi moi je n'ai pas droit à mon dessert !
Hors ligne
sebondus a écrit:
Je viens de tester, j'ai rien de mieux qu'avec zend_optimiser.
Xcache et APC donnent les mêmes résultats à peu pret, zned_optimiser fais mieux que les deux autres.
Donc, qu'est ce que cela signifie ? Doit on en conclure que développer une application avec Zend Framework la rend très lente ?
Quelqu'un a des retours sur la vitesse de traitement / affichage sur de grosses applications développées avec le ZF ?
Dernière modification par elkolonel (26-06-2008 14:45:04)
Hors ligne
Non c'est pas que c'est lent, Zend_form est lent c'est sur, mais c'est juste que le temps minimum de chargement d'une page qui est assez élevé.
Mais si on a des pages vraiment lourdes, on fait pas la différence par rapport à la même page codée sans ZF.
Mais bon, je sais pas comment ça tourne chez vous ??? Combien de temps mets l'initialisation dans le bootstrap chez vous? (J'en suis à 0.18s minimum)
Dernière modification par sebondus (26-06-2008 14:51:29)
Hors ligne
Moi j'ai une moyenne autour de 115ms... mais il est moins chargé que le tiens !
Hors ligne
Je suis pour l'optimisation du code...
Exemple :
Dans une liste, j'affichais 20 lignes et pour chacune de ces lignes je faisais 2 instanciations de Zend_Date pour générer des formats différents. Résultats, ma page se chargeait en 4.19 secondes. Ensuite, j'ai supprimé ces instanciations, la page se charge en ~600ms.
Visiblement Zend_Date est ultra consommateur en temps d'exécution. A éviter donc...
Hors ligne
Pour info, mes problemes vont beaucoup mieux depuis que j'ai :
Réglé l'include path par ordre d'importance :
- lib en premier
- models
- .
Avant j'avais fais l'inverse
Puis comme j'ai activé l'autoload, j'ai aussi commenté tous les "require_once" du Framework.
Franchement la différence de perfs est bluffante
Dernière modification par sebondus (10-12-2008 12:13:02)
Hors ligne
C'est utile de mettre . ??
Hors ligne