IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Débat PHP : Améliorer les performances de Zend Framework

Le , par Kioo

23PARTAGES

0  0 
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
Code : Sélectionner tout
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();
et ensuite le code du controller
Code : Sélectionner tout
1
2
3
4
5
6
class IndexController extends Zend_Controller_Action {
    public function afficherAction() {
    		echo 'prout';
    }
}
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 ...

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de stailer
Membre chevronné https://www.developpez.com
Le 23/05/2008 à 21:54
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 WOrld
1  0 
Avatar de Yogui
Rédacteur https://www.developpez.com
Le 02/06/2008 à 12:00
Voici 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 classes
1  0 
Avatar de Yogui
Rédacteur https://www.developpez.com
Le 03/06/2008 à 14:25
Euh, 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.
1  0 
Avatar de whitespirit
Membre habitué https://www.developpez.com
Le 22/05/2008 à 12:09
A quoi ça sert et comment ça marche :
Code : Sélectionner tout
1
2
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.


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.
0  0 
Avatar de kaymak
Membre émérite https://www.developpez.com
Le 22/05/2008 à 12:11
Salut,

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+
0  0 
Avatar de kaymak
Membre émérite https://www.developpez.com
Le 22/05/2008 à 12:14
Citation Envoyé par whitespirit Voir le message
A quoi ça sert et comment ça marche :
Code : Sélectionner tout
1
2
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.

ab 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 à).

bye
0  0 
Avatar de LoveAngel
Membre actif https://www.developpez.com
Le 22/05/2008 à 12:34
Bonjour \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 ...
0  0 
Avatar de whitespirit
Membre habitué https://www.developpez.com
Le 22/05/2008 à 13:35
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 ?
Bah, le truc standard ! Rien de spécial, la dernière version de ZF, la dernière version d'apache, php, disque IDE, etc... C'est plutot ta bande passante internet qui va jouer !

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).
0  0 
Avatar de Kioo
Nouveau membre du Club https://www.developpez.com
Le 22/05/2008 à 14:52
Config 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
Sauf que le rapport est de 100. Je trouve pas ca léger. Et que nous nous sommes servis de peu de choses du framework.

Que se passe-t-il quand on utilise beaucoup plus de fonctionnalités ?

Merci de vos réponses.
0  0 
Avatar de trashyquaker
Membre du Club https://www.developpez.com
Le 22/05/2008 à 14:54
Bonjour,

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".
0  0