Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-03-2009 14:58:34

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

[Résolu] Code mort et perf sur une app

bonjour à tous,

L'entreprise pour laquelle je travaille va bientôt passer sous ZF. En analysant le pour et le contre des solutions à proposer à nos clients, on analyse la pertinence de créer un RAD sur la base de ZF.

L'argument qui pèse en la défaveur de ZF est le pourcentage de "code mort" c'est à dire, si je ne me trompe pas, du code qui n'est pas exploité dans l'application. Ma question est simple, est ce que le code mort est vraiment un fardeau, fait-il de l'ombre à l'application en terme de performance ?

a-(*-)
Julien

Dernière modification par Roulio (12-03-2009 19:04:20)

Hors ligne

 

#2 12-03-2009 15:11:45

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Code mort et perf sur une app

Cela ne répondra peut-être pas à ta question : http://www.z-f.fr/forum/viewtopic.php?id=2591


aka miboo

Hors ligne

 

#3 12-03-2009 15:38:23

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Code mort et perf sur une app

Je ne comprends pas vraiment comment du code mort (donc des fichiers inutilisés) peuvent avoir une influence sur les performances, vu qu'ils sont inutilisés...
Ou alors j'ai pas compris la question et je mettrais ça sur le dos de la fatigue :p

Hors ligne

 

#4 12-03-2009 15:51:30

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Code mort et perf sur une app

Peut être qu'il fait référence au fait qu'il y a des différences d'utilisation des ressources lorsqu'on utilise une fonction d'un composant du framework et son équivalent en fonction PHP !?


aka miboo

Hors ligne

 

#5 12-03-2009 16:05:36

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: [Résolu] Code mort et perf sur une app

En fait un collègue me donne comme point négatif que d'utiliser un framework contient beaucoup de code mort.

Pourquoi ? Et bien ... il va falloir que je lui repose la question ^^

mais face à un argument comme ça (et comme il est plus expérimenté que moi), je me suis dit : "ok, ça veut dire que si une classe comporte plein de méthodes mais que 50% d'entre-elles sont inutilisées, cela veut dire que lorsque je vais instancier une classe et appeler une méthode, je pourrais avoir des ralentissement, le temps que la routine parcours le fichier".

D'après vous avoir du code mort via l'utilisation du Framework, n'influe en rien ?

Hors ligne

 

#6 12-03-2009 16:13:58

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Code mort et perf sur une app

Moi je suis trop inexpérimenté pour te répondre, par contre, l'instanciation d'une classe sans même l'utiliser peut bouffer un peu de mémoire, et certains composants du Zend Framework sont très forts pour ça (Zend_Date est un composant très gourmand).

La mise en place d'un framework nécessite beaucoup plus de ressources qu'un développement classique d'où l'idée de mettre en place un système de cache pour limiter ces pertes. J'ai vu certains utilisateurs de ce forum ne pas passer au Zend Framework pour certaines parties d'applications critiques.


aka miboo

Hors ligne

 

#7 12-03-2009 16:17:15

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: [Résolu] Code mort et perf sur une app

@ MrMoOx : oui, expliquer comme ça, c'est vrai que du code mort ne peux pas gêner ^^

@miboo : j'ai lu les posts sur le sujet que tu as envoyé, très intéressants et je pense que ce dont me parle mon collègue (qui n'est pas là, vous l'aurez compris, sinon la question aurait été moins ambigu smile ) vient comme tu le dit de l'instanciation des classes.

Donc le compromis serait d'utiliser des fonctionnalités du Framework (les "légères") et de coder celles qui sont trop lourdes à supporter si l'application devient exigeante en ressource ?
Avant d'avoir des problèmes de perfs, il faut en faire des actions gloutonnes (et des bien grosses) , non ?

Dernière modification par Roulio (12-03-2009 16:23:37)

Hors ligne

 

#8 12-03-2009 17:45:18

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu] Code mort et perf sur une app

bonjour :

Avant d'avoir des problèmes de perfs, il faut en faire des actions gloutonnes (et des bien grosses) , non ?

j'ai déjà fait ça en 2 lignes de code et sans le vouloir ;-).

Sinon plus sérieusement :
Avec le peu d'expérience que j'ai sur ce framework, en utilisant un cache d'op code (APC), en paramétrant correctement le serveur web (apache), proxy .. etc ca tourne nikel même avec de la charge .

J'ai une application avec de tout : ajax, webservice, utilisation de certificat client etc ...
Les seuls goulots d'étranglement que j'ai eu était des requêtes et la structure de ma BDD mal optimisées.

Si tu as des problemes de performance c'est que l'ensemble de l'architecture (materiel et logiciel )est mal pensée, dimensionné... (biensur le framework en fait partie mais ce n'est pas la seule piece)...

Par exemple je pense que personne ici ne montera une apli attendant de la charge sans système de cache d'opcode avec un framework quel qu'il soit  (symphony ...).

résumé :
les performances ne dépendent pas uniquement de l'utilisation d'un framework .

Ceci n'est que mon avis biensur.

Dernière modification par ichevc02 (12-03-2009 17:46:50)

Hors ligne

 

#9 12-03-2009 17:56:47

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Résolu] Code mort et perf sur une app

Un ptit coup de KCacheGrind, VallGrind (CallGrind), et ext/inclued permet de détecter facilement les goulets d'étranglements.
Après il faut les corriger, mais souvent ce sont les mêmes : la base de données, une mauvaise gestion du cache (appli, HTTP, etc...), les ressources ouvertes, et la session.

Hors ligne

 

#10 12-03-2009 18:18:57

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [Résolu] Code mort et perf sur une app

Mon expérience dans pas mal d'univers différents incite à faire la chasse au code mort pour des raisons de maintenance, et de temps de compilation.

Sur de très gros sources la compilation et l'édition des liens peuvent prendre des heures, dont pas la peine d'arriver le matin au bureau avec une compilation foirée à cause d'un code mort qui utilise d'autre ressources, mortes elle aussi mais, elles, supprimées.

Ceci dit, sur du code compilé avec des grosses chaînes de traitement qui tournent en batch pendant une centaine d'heure, le code mort alourdit inutilement les exécutables, génère des temps de chargement plus longs, des swap éventuels, de la pagination mémoire supplémentaire.

Donc dans certains cas, le code mort peut être une charge à tous les niveaux.

Mais dans le cas du ZF avec les environnements qui nous concernent, je ne crois pas.

Hors ligne

 

#11 12-03-2009 18:25:57

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu] Code mort et perf sur une app

le code mort au vrais sens du terme c'est c@#n mais c'est pas un gros problème
bien évidement plus il y en a plus ça a de l'impact.
mais cela reste très marginal.

tout le code dans des fichiers inutilisé ça ne plombe que le disque et rien d'autre.

pour le code inutilisé dans un fichier c'est un peut différent
tout d'abord le fichier est référencé par Zend_Engine s'il rencontre une directive require ou include.
puis il passe dans l'analyser syntaxique.
là plusieurs chose se présente tout ce qui est hors des balise <?php ?> est directement envoyé sur la sortie (au client) et n'est pas traité plus que ça.
pour ce qui est entre les balises l'analyser va avancer dans le code et le passer au compilateur qui lui va décider de la suite.
si le code est directement dans la balise il est compilé s'il est dans un méthode une fonction il est gardé en cache seule la référence à la fonction est compilée.
l'utilisation d'une méthode non compilé entraine sa compilation le source est alors dégagé et le code compilé gardé en cache.

il me semble que des optimisations encore plus poussées ont été faites dans les versions 5 et que ce principe l'applique aussi au section de code conditionnel (if boucles)


pour revenir à notre code mort
un fonction inutilisée vas donc être lue référencée et sont source gardé et c'est tout.
elle vas donc consommer un peu de mémoire. comme elle n'est pas utilisée elle fera partie des premiers élément que l'interprète va jeter lorsque la place viendra à manquer.

si par malheur cela arrivait à une fonction utilisée très rarement il y aurait relecture du source et régénération de la portion de code  compilé.

donc côté perf une telle méthode ou fonction c'est quasiment rien.

une classe c'est quasiment la même chose mais en plus compliqué
lorsque la classe est chargée toute ça partie déclarative est compilée c'est à dire la définition des membres et des méthodes mais les méthodes ne sont pas compilées.
la classe ne quittera le cache que si elle n'est pas utilisée et qu'aucune autre classe ne la référence (par héritage)

durant la vie du serveur les fichiers vont donc se charger au fur et à mesure et la compilation du code ce complètera petit à petit.
les classe non chargé reste sur le disque et les classes chargées sont déclarée et compilée au besoin.

donc le surcout en temps pour un code mort c'est le passage dans l'analyseur syntaxique.
plus pendant un temps plus ou moins long de la consommation mémoire.

C'est très faible.
à titre de comparaison le temps pris par l'autoload pour déterminer quel fichier charger lorsqu'on référence une classe est très largement plus élevé que la lecteur de la classe qu'il contient.

je n'ai plus les bench mais charger un fichier qui contient une simple fonction et charger un autre qui vas contenir 100 000 définition de la même fonction ne permet pas de percevoir la différence. il faut des outils d'analyse de perf de zend pour le voir.

c'est justement une des force du moteur de Zend que d'être capable de gérer efficacement le code compilé.

A+JYT

Hors ligne

 

#12 12-03-2009 19:04:06

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: [Résolu] Code mort et perf sur une app

4 posts => 4 visions différentes et complémentaires pour 1 explication complète smile

Merci à tous.

Hors ligne

 

#13 17-03-2009 14:18:48

Nikkau
Membre
Date d'inscription: 25-03-2008
Messages: 52

Re: [Résolu] Code mort et perf sur une app

Au passage, par définition, utiliser un framework c'est justement faire le choix de sacrifier des perf' pour augmenter sa productivité wink .

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages