Organistion, Optimisation & Qualité

Rechercher

Organistion, Optimisation & Qualité

Par gok6tm  -  4 reponses  -  Le 16/05/2008 10:54  -  Editer  - 

Bonjour

Ayant appris le PHP & MySQSL de façon autodidacte, je souhaiterai améliorer le site que j'ai développé.

On trouve de nombreux tutoriels d'optimisation, notamment sur ce site, de qualité et clair. Mais cette optimisation passe surement aussi par une analyse globale du projet, qui elle est rarement appréhendée.

Tout d'abord l'organisation (ventilation des fonctions dans différents fichiers) et structure du code avec peut etre une methode de type :

  • contrôle - requetes SQL - présentation est surement à réfléchir et a retravailler. il me semble que plusieurs écoles (méthodes, par ex MVC / MVC2, ...) coexiste, laquelle choisir ? dans quels cas ? pour quelles raisons ? Faut il utiliser un Framework, des bibliotheques PEAR ?

La structure de la base de données et les requêtes, savoir positionner les indexes, l'utilisation de vues et sommaires. Comprendre le résultat de la clause EXPLAIN, la connexion via PDO.

La configuration du serveur (Linux, apache, php, mysql) avec des critères de rapidités et sécurités. oulalala quels vastes sujets !

Le poids des pages pour limiter la bande passante qui d'après ce que j'ai compris des experts de chez yahoo! représente 80% du temps de chargement. La compression GZIP

L'optimisation du code PHP pour limiter les opérations et l'occupation mémoire.

La conformité au standard (xhtml pour moi) et l'accessibilité pour le respect des visiteurs.

A votre avis où trouver une source d'information globale ou point par point ?

L'ordre de priorité ci dessus, correspond t-il à l'analyse à effectuer sur un projet ?

Existes t'il des utilitaires ou méthodes pour déceler les parties prioritaires à optimiser ?

Quel est votre livre ou document en ligne préféré sur le sujet ?

Merci de votre aide !

Jay

PS: il y aussi d'autres approches du sujets style : "tant que ca marche !" et pour vous ?

 

Réponses apportées à cette discussion

Par Emacs  -  Le 16/05/2008 11:37  -  Haut de page  - 

Je suis entrain de te préparer une réponse à ton topic. Je te la publierai ce midi à ma pause déjeûner ;)

 
Par Emacs  -  Le 16/05/2008 14:16  -  Haut de page  - 

Bonjour gok6tm,

Ton sujet est très vaste et amène à des discussions variées. La première réponse globale que je peux donner à toutes tes questions est : "ça dépend de ton projet". Les choix que tu vas devoir prendre vont dépendre de la grosseur de ton projet et de sa fréquentation journalière. Je vais essayer de reprendre point par point tes questions et te donner un avis très personnel qui n'engage que moi. Libre à toi de l'évaluer en fonction de ton projet, du temps que tu veux y consacrer, de tes attentes personnelles en terme de développement...

>

On trouve de nombreux tutoriels d'optimisation, notamment sur ce site, de qualité et clair. Mais cette optimisation passe surement aussi par une analyse globale du projet, qui elle est rarement appréhendée.

Tout d'abord je te remercie pour le jugement positif que tu portes à Apprendre-PHP.com. Ca fait toujours plaisir d'avoir de si bons retours. Pour répondre maintenant à cette affirmation, je plussoie tes propos. Oui une optimisation du projet passe avant la réalisation du projet, pendant mais surtout après quand l'application est définitevement en production et cotoie son environnement réel. Ce dernier étant très difficile à évaluer dès le début du projet. Dans ton cas, il faut que tu vérifies ce que tu veux par optimisation : plus de rapidité ? plus de sécurité ? moins de code mort ou inutile ? Dans l'idéal ce serait d'avoir le tout en un. Mais tout n'est pas compatible. Par exemple, en appuyant la sécurité (avec davantage de contrôle d'entrée / sortie notamment), on alourdit le code et également les temps d'exécution. Un code veloce est bien souvent un code sans sécurité. Mais il existe également des solutions de cache pour optimiser tout ça. Par exemple mettre en cache en page statique les pages qui ne bougent pas beaucoup dans le temps, utiliser des accélérateurs d'opcodes afin d'éviter la phase d'interprêtation du code en opcodes à chaque requête, compresser les pages web avant envoi à l'utilisateur, configurer correctement tout son environnement de production (Apache, PHP.ini, MySQL.cnf...). Donc comme tu as pu le lire dans l'article sur l'optimisation MySQL par exemple, cette phase dans un projet est assez délicate car elle est dépendante de tous un tas de paramètres (du matériel, de la connexion, du code, de la configuration, des images...).

contrôle - requetes SQL - présentation est surement à réfléchir et a retravailler. il me semble que plusieurs écoles (méthodes, par ex MVC / MVC2, ...) coexiste, laquelle choisir ? dans quels cas ? pour quelles raisons ? Faut il utiliser un Framework, des bibliotheques PEAR ?
 

Là encore ça dépend de la taille de ton projet. Si ton projet est vraiment volumineux et a besoin d'une véritable structuration cohérente et souple, alors l'utilisation d'un framework peut-être envisagée. Néanmoins, tous les frameworks ne sont pas identiques. Certains sont plus complexes et plus riches que d'autres et leur courbe d'apprentissage n'est également pas du tout la même. Ce qu'il faut savoir avec les frameworks, c'est qu'il demande avant tout un temps non négligeable d'adaptation et d'adoption. C'est un outil qui a des règles d'utilisation bien particulière pour qu'il puisse fonctionner correctement. Ainsi, comme tout langage de programmation, de logiciel ou autre, tu devras manipuler le framework pendant plusieurs semaines pour arriver à le maîtriser. De ce fait, la création / mise à jour de ton application sur ce framework risque d'augmenter dans le temps. Le choix d'un framework est aussi une réflexion qui doit être murement réfléchie en fonction de tes besoins. Certains frameworks dispose (ou non) par exemple de génération de code automatique, du scaffolding (CRUD), supporte l'internationnalisation et la localisation, intègre une abstraction de bases de données et /ou un moteur de mapping relationnel... Selon tes besoins et tes attentes en terme de développement, tu devras faire le choix de l'un ou l'autre des frameworks proposés. Il faut également savoir que certains d'entre eux fonctionnent aussi toujours sous PHP 4, ce qui n'est pas forcément intéressant. A ce jour les principaux frameworks sont CakePHP (PHP4 / 5), CodeIgniter (PHP4 / 5), Symfony (PHP 5), Zend Framework (PHP 5), Jelix (PHP 5), Copix (PHP 5)... Ils "supportent" tous le patron MVC à des niveaux de complexité différents. Pour ma part, si tu devais faire le choix de l'un ou l'autre de tous ces frameworks, je t'orienterai vers Symfony qui est sans doute le plus complet (MVC, I18N, L10N, CRUD, Cache, Sécurité, Communauté active, Documentation abondante, extensibilité...) mais aussi le plus complexe à prendre en main. Il faut y passer plusieurs semaines à fond sur un projet concret pour en tirer profit et comprendre son fonctionnement intrinsèque. Symfony est sponsorisé par Sensio Labs qui dédié un pôle de développement au framework. De ce fait, le framework est enrichit quotidiennement par le Core Team et des mises à jour importante du code sont publiées régulièrement (en moyenne une par mois). Sensio s'engage également à maintenir la version 1.0 stable pour encore 3 années et commencent déjà à réfléchir au développement des versions 1.2 et 2.0 qui seront encore meilleures. La version 1.1 quant à elle est déjà sur les rails en version Release Candidate. De ce fait, on s'assure que Symfony est un framework pérenne dans le temps puisqu'il sera maintenu au minimum pour trois bonnes années et plus encore.

Copix et Jelix semblent eux aussi de très bons concurrents à Symfony. Ils sont plus souples et moins complexes et proposent la plupart des outils que l'on peut trouver dans Symfony (architecture MVC, sécurité, CRUD, cache...). En revanche, ils ont le défaut ( à mon humble d'avis ) d'avoir recours à des moteurs de templates comme Smarty pour le rendu des vues. Personnellement c'est ce qui m'a davantage pousser à adopter Symfony par rapport à l'un de ces deux frameworks. Mais je suis certain que l'on peut éviter d'utiliser le moteur de template et le remplacer par des vues purement PHP / HTML.

Enfin le dernier framework que je peux te recommander est Zend Framework. Ce n'est pas tout à fait un framework en soit puisque ZF est en fait une librairie d'outils que tu utilises à ta guise pour monter tes applications. Tu es libre de structurer ton code et ta hierarchie de fichiers au risque de créer une ossature peu cohérente et robuste. C'est donc ce que je trouve dommage du côté de ce framework. C'est sa trop grande souplesse. En revanche, ce qui fait sa force c'est qu'il est entièrement PHP 5 et MVC, et qu'il est soutenu par Zend Technologies. La société officielle qui commercialise des produits pour PHP. Zend, comme Sensio, dispose d'un Core Team d'une cinquantaine de personnes qui s'occupent de développer les outils du framework, de les valider et de les tester. Chaque classe et fonctions déployée dans le framework a subi un cycle de développement très précis et sérieux. Cela assure donc une qualité irréprochable au code. La documentation de Zend Framework est quant à elle très riche ce qui fait également son succès. Enfin, du fait qu'il se rapproche davantage de la syntaxe traditionnelle de PHP, sa courbe d'adoption est beaucoup plus rapide que Symfony.

Concernant PEAR, je t'avouerai que je n'y ai jamais touché. Je sais à quoi correspond PEAR dans sa globalité. De nombreux packages pratiques existent avec PEAR mais le gros défaut est leur obsolécence pour certains vu qu'ils sont restés au stade PHP 4. Globalement, Zend Framework est un fork de PEAR mais entièrement en PHP 5 et composé classes presque toutes indépendantes les unes des autres. En revanche PEAR accentue davantage son code sur des dépendances. Donc si toute fois tu souhaitais t'orienter vers une programmation "PEAR Like", alors je t'inciterai tout de suite à utiliser Zend Framework.

*** La structure de la base de données et les requêtes, savoir positionner les indexes, l'utilisation de vues et sommaires. Comprendre le résultat de la clause EXPLAIN, la connexion via PDO.***

Effectivement, le monde du Web est riche en technologies. Tu ne peux pas uniquement optimiser ton application que sur PHP. La connaissance de l'environnement des bases de données est aussi un plus non négligeables pour optimiser le code. Les SGBDR (MySQL, PostGreSQL, Oracle, SQL Server...) ont tous des disparités bien qu'ils utilisent le langage SQL (chacun à leur manière en réalité). Ainsi, connaître les spécificités de chacun en terme de configuration et de "requêtage" te permettra d'optimiser davantage ton application. C'est d'ailleurs aussi pourquoi les métiers du Web ont tendance à de plus en plus se spécialiser du fait de la complexité des technologies. Encore quelques années en arrière, un site pouvait être développé et maintenu par une seule personne un peu "bidouilleuse". Aujourd'hui c'est moins le cas. On a des développeurs spécialisés dans tel ou tel langage, des administrateurs de bases de données, des ingénieurs réseaux, des intégrateurs XHTML et CSS...

*** La configuration du serveur (Linux, apache, php, mysql) avec des critères de rapidités et sécurités. oulalala quels vastes sujets !***

Là encore la configuration de serveurs web nécessite d'excellentes compétences et c'est pourquoi des métiers spécialement destinés à cette tâche sont nés.

*** Le poids des pages pour limiter la bande passante qui d'après ce que j'ai compris des experts de chez yahoo! représente 80% du temps de chargement. La compression GZIP***

Des stratégies de mise en cache de pages côté serveur et côté client existent. Par exemple, Symfony intègre en natif un système de cache pour garder en mémoire pendant un certain laps de temps des pages dynamiques mais qui ne bougent pas trop dans le temps. Elles sont donc générées une bonne fois pour toutes puis stockées sur le serveur en statique jusqu'à celles bougent de nouveau. Grâce à cela, on réduit déjà le temps de chargement des pages. Vient aussi d'autres moyens pour cacher certains traitement lourds comme la compression GZip pour le rendu final des pages au client, les accélérateurs d'opcodes mais aussi les caches d'Apache et le cache de requêtes de MySQL par exemple. En combinant tout ça, on peut considérablement accélérer le rendu des pages mais y parvenir demande beaucoup de temps et de compétences techniques aux développeurs du fait de l'implication de plusieurs technologies dans le processus.

L'optimisation du code PHP pour limiter les opérations et l'occupation mémoire.

L'optimisation du code PHP passe tout d'abord par l'utilisation de bonnes pratiques de codage et de certaines fonctions du langage plutôt que d'autres qui te feront gagner quelques pouillièmes de seconde à l'exécution. Mais tu peux encore optimiser en mettant régulièrement à jour la version de PHP de ton serveur. Mais aussi en supprimant de ton code, tous les traitements inutiles, le code "mort", les duplications de variables inutiles... Là encore ça demande beaucoup de temps car il faut utiliser des outils de profiling du code pour entrer dans ses entrailles et comprendre comment chaque ligne de code est exécutée. Enfin tu as l'accélérateur d'opcode qui peut te faire gagner environ 40% à plus de 100% de temps d'exécution.

*La conformité au standard (xhtml pour moi) et l'accessibilité pour le respect des visiteurs. *

Ca fait partie des bonnes pratiques de programmation du web mais ça n'impacte pas directement l'optimisation. En revanche ça permet de rendre ton application portable sur davantage de supports (écran, mobile, impression...). Il est bon de noter que XHTML ne veut pas dire "accessible". Des sites en HTML 4.01 bien écrits sont également aussi bien accessibles que des sites en XHTML. Et il existe des sites XHTML qui ne sont pas du tout accessibles pour différentes raisons.

*** A votre avis où trouver une source d'information globale ou point par point ?***

A mon avis tu n'en trouveras pas. Le mieux c'est de chercher sur Google des sites dédiés à chaque technologies qui te permettront d'avoir des éléments de réponses pertinents.

*** L'ordre de priorité ci dessus, correspond t-il à l'analyse à effectuer sur un projet ?***

Ca dépend. Si tu démarres un projet, l'idéal c'est de commencer par analyser les différentes solutions technologiques qui s'offrent à toi en fonction des finances dont tu disposes (pour la location d'un serveur web dédié par exemple). Il faut t'intéresser dès le début aux besoins du client (où les tiens si tu développes pour toi) et tenter au maximum de configurer tes environnements pour qu'ils s'adaptent à ces besoins très précis. Par exemple : tu ne vas pas utiliser GD avec PHP, donc pas la peine de charger l'extension dans PHP sur ton serveur. Puis tu fais le choix de ton environnement de développement : framework ou pas ? Ensuite tu passes à la modélisation de ta base de données : relations entre les tables, positionnement d'indexes, choix du moteur de stockage, choix du SGBDR... A partir de là tu peux te mettre à coder et tester ton code dans différents environnement techniques : développement, recette, test et production. L'environnement de dev par exemple sera "très" lent car tu auras tous les outils de débug activés, aucune mise en cache... Contrairement à l'environnement de prod' qui lui n'affichera pas les erreurs, disposera d'un cache d'opcodes, d'un cache de requête SQL, de caches de pages en PHP... Quand ton application finale est en prod' et qu'elle est sollicitée par les visiteurs, c'est à ce moment que tu dois vérifier si le serveur supporte bien la charge, si des requêtes sont lentes à s'exécuter car les indexes sont mal identifiés ou les jointures mauvaises... Dès lors, tu pourras dire : c'est ok l'application se porte bien et pas la peine d'aller plus loin dans l'optimisation. Si non, alors tu vas devoir tenter de profiler chaque exécution un peu trop lente pour tenter d'y remédier.

*** Existes t'il des utilitaires ou méthodes pour déceler les parties prioritaires à optimiser ?***

Il y'en a ! Il faut regarder du côté des softs qui permettent de faire du profiling et du monitoring des applications Apache, PHP, MySQL, des serveurs, du réseau...

*** Quel est votre livre ou document en ligne préféré sur le sujet ?** *

Pour l'optimisation, je cherche des articles sur Google. Sache toutefois que tout ce que tu pourras lire sur l'optimisation est à prendre avec des pincettes. En effet, les résultats de benchmarking que l'on te montre dépendent de tout un tas de critères qui ne sont pas du tous les mêmes que sur ton environnement à toi : différences de versions de PHP, Apache, MySQL..., pas le même code, pas la même structure de BDD, pas les mêmes configs...

C'est pour ça que le sujet de l'optimisation est délicat. En conclusion, on peut juste affirmer qu'il existe des méthodes et bonnes pratiques pour améliorer son application et l'optimiser de manière générale. Mais arrivé à un certain stade de l'optimisation, il faudra plonger dans l'environnement pour comprendre pourquoi tel ou tel processus (au sens large du terme) est lent, chute brutalement...

J'espère que tout ça t'aidera dans tes choix décisionnels ;)

++

Hugo.

 
Par gok6tm  -  Le 16/05/2008 15:13  -  Haut de page  - 

Merci,

Une réponse très détaillée et rapide ;)

Comme tu le dis tout dépend du type de projet, et bien c'est simple : GRANDIOSE et ULTRA FREQUENTE !!! :)

Enfin disons que le projet est ridicule, mais que j'espère arrivé à un service utile et a de nombreuses consultations. Et attendu que toutes les fonctionnalitées ne seront pas implémentées à la mise en production, et étant seul sur le projet je me retrouve avec 3 charges de boulot : 1 développement commercial du service / 2 Maintenance (ce n'est qu'une béta) amélioration de la sécurité et optimisation / 3 implémentation de nouvelles fonctionnalitées.

J'essayes de prendre de l'avance sur l'étape 2 et c'est ce qui m'amène à ce post. Au vue de mes différentes lectures et à ta réponses je crois de + en + que mes choix décisionnels vont se concentrer à trouver un partenaire spécialisé sur toutes ces questions ! L'informatique est un métier et mes capacités d'autodidacte vont s'arréter au déveoppement de la béta.

L'idée du FRAMEWORK comme tu le précise nécéssite un apprentissage chose qui m'a toujours rebuté, je comprends les avanatages des milliers de fonctions intégrés et autres méthodes implémentées mais le manque de maitrise de l'ensemble associé à la dépendance qui se créer par rapport à ce dernier m'amène à rester sur mon petit notepad++ et d'autant plus que le projet est déjà bien avancé.

*La conformité au standard (xhtml pour moi) et l'accessibilité pour le respect des visiteurs. *

[...] Il est bon de noter que XHTML ne veut pas dire "accessible". Des sites en HTML 4.01 bien écrits sont également aussi bien accessibles que des sites en XHTML. Et il existe des sites XHTML qui ne sont pas du tout accessibles pour différentes raisons.

Tout a fait d'accord, j'ai bien séparé la conformité et l'accessibilité ;) mais j'ai pas fait encore l'éffore maximum en ce qui concerne l'accessibilité (ca fait parti des améliorations à apporter)

Merci encore pour tes lumières

 
Par hthetiot  -  Le 25/08/2008 23:07  -  Haut de page  - 

Je te conseile d'aprendre à utilisé XDebug et WebGrind.

  • http://www.xdebug.org/

  • http://code.google.com/p/webgrind/

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |