Developpez.com - Zend Framework

Le Club des Développeurs et IT Pro

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
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();
et ensuite le code du controller
Code :
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 ...
  Discussion forum
40 commentaires
  • stailer
    Membre 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 WOrld
  • Yogui
    Rédacteur
    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
  • Yogui
    Rédacteur
    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.
  • whitespirit
    Membre habitué
    A quoi ça sert et comment ça marche :
    Code :
    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.
  • kaymak
    Membre émérite
    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+
  • kaymak
    Membre émérite
    Envoyé par whitespirit
    A quoi ça sert et comment ça marche :
    Code :
    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
  • LoveAngel
    Membre actif
    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 ...
  • whitespirit
    Membre 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 ?
    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).
  • Kioo
    Nouveau membre du Club
    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.
  • trashyquaker
    Membre du Club
    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".