Débat PHP : Améliorer les performances de Zend Framework
Le 2008-05-22 10:43:29, par Kioo, Nouveau membre du Club
Bonjour tout le monde, peu de personnes en parle mais il est intéressant de discuter des performances du Zend Framework.
Dans la société pour laquelle je travaille nous avons fait des tests ultra basiques. Et nous sommes arrivés à la conclusion suivante: le Zend Framework n'avance pas, rame la mort même, ...
Nous avons peut-être rater quelque chose, un petit guide sur l'optimisation serait quand meme le bienvenue.
Ci-dessous le code du test
le boot strap, on remarque qu'il n'y a même pas de rendu avec le ViewRenderer mais qu'il y a l'autoload
et ensuite le code du controller
donc rien que le controller et un echo pour afficher 'prout'
hop un petit apache dessus: ab -n 100 -c 10 -k http://adresse_qui_va_bien
on obtient un résultat de environ 3.5 req/s.
Un seul echo dans un script php, on obtient des performance 100 fois supérieure.
Autant dire que pour notre projet utilisé un "truc" avec de telle performance c'est comme se tirer une balle dans le pied voir dans la tête.
Est-ce que les avantages du framework nous font gagner des performances au fur et à mesure de son utilisation ?
Enfin pouvez-vous m'aiguiller, me donner des éléments de réponses ...
Dans la société pour laquelle je travaille nous avons fait des tests ultra basiques. Et nous sommes arrivés à la conclusion suivante: le Zend Framework n'avance pas, rame la mort même, ...
Nous avons peut-être rater quelque chose, un petit guide sur l'optimisation serait quand meme le bienvenue.
Ci-dessous le code du test
le boot strap, on remarque qu'il n'y a même pas de rendu avec le ViewRenderer mais qu'il y a l'autoload
Code : |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | error_reporting (E_ALL) ; ini_set ('display_errors','yes'); set_include_path('.'. PATH_SEPARATOR . '../library'. PATH_SEPARATOR . '../application/models/'. PATH_SEPARATOR . get_include_path()); include_once('Zend/Loader.php'); Zend_Loader::registerAutoload(); $frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); $frontController->setControllerDirectory('../application/controllers'); $frontController->setParam('noViewRenderer', true); $frontController->dispatch(); |
Code : |
1 2 3 4 5 6 | class IndexController extends Zend_Controller_Action { public function afficherAction() { echo 'prout'; } } |
hop un petit apache dessus: ab -n 100 -c 10 -k http://adresse_qui_va_bien
on obtient un résultat de environ 3.5 req/s.
Un seul echo dans un script php, on obtient des performance 100 fois supérieure.
Autant dire que pour notre projet utilisé un "truc" avec de telle performance c'est comme se tirer une balle dans le pied voir dans la tête.
Est-ce que les avantages du framework nous font gagner des performances au fur et à mesure de son utilisation ?
Enfin pouvez-vous m'aiguiller, me donner des éléments de réponses ...
-
stailerMembre chevronnéComplètement d'accord avec Yogui...
Et je dirais même mieux, les performances peuvent être aussi un peu plombées SANS framework : imaginons une appli qui tourne avec du PEAR, du SMARTY, du DOCTRINE ou ADODBphp et du XAJAX dans tous les sens... pas de framework , mais des librairies ultra complètes qui, une fois toutes instanciées risquent elles aussi de plomber un peu les performances.
Donc voilà, un framework c'est une plateforme de développement, et si vraiment on parle de dizaine de milliers d'accès, la vraie solution est je pense : LE CACHE.
Cache de requêtes en BDD, cache de vues pour l'affichage..
Bref, définitivement non, Zend , Symfony ne sont pas faits pour des Hello WOrldle 23/05/2008 à 21:54 -
YoguiRédacteurVoici une page du Wiki de ZF, où tout le monde est libre d'ajouter ses astuces de performances : http://framework.zend.com/wiki/displ...formance+of+ZF
Il y a déjà une grosse étude sur le chargement automatique des classesle 02/06/2008 à 12:00 -
YoguiRédacteurEuh, il faut bien prendre en compte que pour comparer honnêtement, il faudrait installer Windows et Linux sur la même configuration (composants électroniques + version des drivers), et avec les mêmes procesus chargés en mémoire. Si tu compares ton ordi de bureau (Windows) avec le serveur mutualisé, rien d'étonnant à ce qu'il y ait de tels écarts.le 03/06/2008 à 14:25
-
whitespiritMembre habituéA quoi ça sert et comment ça marche :
Code : 1
2hop un petit apache dessus: ab -n 100 -c 10 -k http://adresse_qui_va_bien on obtient un résultat de environ 3.5 req/s.
Bonjour,
Pour avoir une idée concrète et ne pas partir dans des débats du genre "oui mais..." je te conseil de regarder un cas concret d'une application utilisant ZF qui tourne. Il s'agit d'une boutique eCommerce open source et tu pourras avoir une démo à cette adresse : magento Ce site a quand même été réalisé par des pros du ZF (les créateurs je crois) donc c'est parfait.
En ce qui me concerne, ZF rame un peu, mais mon code est souple et très simple à maintenir. Pourtant je fais des choses complexes (qui sont gérés par ZF) comme une gestion d'acl, etc... Mon site rame beaucoup plus que le site de magento, mais je ne suis pas encore expert dans le web, php et zf, un jour peut-être
Encore une fois, tout dépend ce que vous devez développer.le 22/05/2008 à 12:09 -
kaymakMembre émériteSalut,
La question m'interesse aussi n'étant pas utilisteur de zf.
Mais peux tu préciser un peu ta configuration :
Version de php
Version d'apache (Sa peut jouer ?)
Systeme de cache (APC, eaccel..) ?
Type de disque/serveur ?
Version de ZF ?
Bref préciser un peu ton environnement pour pouvoir par la suite comparer si le nombre de réponses est suffisant.
Merci,
a+le 22/05/2008 à 12:11 -
kaymakMembre émériteab pour Apache Benchmarking, c'est un petit utilitaire fournit avec Apache qui permet de simuler une charge sur un serveur web.
http://httpd.apache.org/docs/2.0/programs/ab.html
La -c 10 pour réaliser 10 requete simultanées et -n 100 pour le nombre de requetes total, -k pour activer le keepalive (là je ne sais pas topr l'impact que cela à).
byele 22/05/2008 à 12:14 -
LoveAngelMembre actifBonjour \o/
J'utilise ZF régulièrement tous les jours depuis bientôt 1 mois, et franchement, je ne suis pas déçu des performances .. des pages qui se generent en moins d'une demi seconde sur un PC pas super puissant ( avec eclipse + firefox, donc la ram, autant dire qu'elle a disparue depuis longtemps ), et pour des operations parfois complexes
Sinon, c'est un peu normal qu'il y'ai une 'legère' difference entre ZF et un script tout simple .. tu as pas idée du nombre de trucs qu'y charge rien que pour ton petit echo la ..
Puis, franchement .. utiliser ZF pour faire un echo, c'est prendre un lance missile nucléaire dernière génération ( que les americains savent même pas avoir inventés en secret ), le tout pour enfoncer une porte ouverte.
Par contre, va t'amuser à faire des traitements, devoir débugger ton code .. ca, au moins, c'est optimisé niveau codage / debug, et je trouve que ca vaut bien un peu de chargement en plus
Donc bah voila, ZF, c'est p'tet un peu pas rapide, mais ca le vaut bien ! \o/
Sinon, t'a une solution : demander à quelqu'un que tu aimes pas de coder l'appli, comme ca, il se tire une balle dans le pied ou la tête, et t'est tranquille ...le 22/05/2008 à 12:34 -
whitespiritMembre habituéMais peux tu préciser un peu ta configuration :
Version de php
Version d'apache (Sa peut jouer ?)
Systeme de cache (APC, eaccel..) ?
Type de disque/serveur ?
Version de ZF ?
La question serait de savoir quelle type d'application vous devez développer, en combien de temps, et combien de personnes vont travailler dessus. Une contrainte d'utiliser ZF serait alors son temps d'apprentissage (comme pour n'importe quelle autre framework).le 22/05/2008 à 13:35 -
KiooNouveau membre du ClubConfig de test
Machine: P4 3 ghz avec 2 Go de Ram sous Red Hat 5
Apache: 2.2.6
PHP: 5.2.5
L'accès disque est un samba connecté en 1 gigabit.
Les disques physique sont une grappe raid 5 de 6 disques (qui envoit du 250 Mo/s)
A propos du cache
Nous avons réalisé des tests avec APC, nous arrivons à 20 req/s pour un echo sans chargement de ViewRenderer et 10 req/s lorsque nous affichons notre rendu grâce à celui-ci.
L'utilisation de Zend est pour refondre un site qui a parfois 3 000 accés in the same time. Donc c'est pas rien.Sinon, c'est un peu normal qu'il y'ai une 'légère' différence entre ZF et un script tout simple
Que se passe-t-il quand on utilise beaucoup plus de fonctionnalités ?
Merci de vos réponses.le 22/05/2008 à 14:52 -
trashyquakerMembre du ClubBonjour,
Effectivement je pense aussi que le gros inconvénient du ZF c'est sa lenteur...C'est ce qui m'a le plus rebuté quand je l'ai utilisé les premières fois.
Dans ma boite, une équipe qui utilise le ZF depuis assez longtemps avait trouvé une méthode en regroupant le code du Zend Loader sur un fichier... (Galère donc.) Ce qui permettait des gains de l'ordre de 40% (C'était encore sur la 1.0).
Je n'ai pas plus de détail que ça, c'était une discussion de machine à café avec ladite équipe mais je suppose qu'il y a des sources sur le web si t'es motivé
Maintenant, pour des projets ne nécessitant pas une rapidité particulière, le gain en clarté au niveau du code, la simplicité de la mise en place du ZF et du MVC justifient son utilisation. D'ailleurs pour le moment je n'ai pas du tout envie de m'en passer!
De plus, tout de même, par rapport à ton test, le changement de ton "echo" par un traitement plus complexe ne devrait pas rallonger énormément le temps d'exécution du script, le plus gros du travail étant déjà effectué avant le "echo".le 22/05/2008 à 14:54