Blog

Home/Articles/6 astuces pour de mauvaises « performances » PHP

6 astuces pour de mauvaises « performances » PHP

FaceBook est construit sur base de PHP. Et Yahoo. Et Flickr. Et Wikipedia.

Cette réalité à elle seule devrait mettre une fin à l’éternelle affirmation injustifiée qu’il est impossible de créer des systèmes complexes et rapides en PHP, sauf, biensur, si vous pensez que tous les sites mentionnés ci-dessus sont trop petits et trop lents pour tenir la comparaison avec d’autres – auquel cas je vous inviterais à visiter ce site.
Venons-en à l’essence de mon article maintenant, qui ne se veut absolument pas une référence d’optimisation de performances, ni complet ou exhaustif, mais plutôt une liste de quelques observations et réflexions plus ou moins précises sur le sujet.

Le mot « Performances » lui-même doit être bien défini, avant toute autre chose. Recherche-t-on des temps de chargement de page très courts, ou la capacité à servir un très grand nombre de visiteurs simultanés, auquel cas nous parlons de « scalabilité » ? Ce n’est pas parce qu’une action de votre application se déroule et 65 millisecondes que votre système peut être considéré comme « rapide », si ce temps s’envole dès que vous avez plus que 10 utilisateurs simultanés. De même, la valeur absolue de 65 millisecondes peut être considérée comme rapide ou lente, en fonction du cas – ici, elle a été choisie purement arbitrairement. Dans la vraie vie, posez-vous les bonnes questions sur la future utilisation de vos développements. Qui en seront les utilisateurs, et quelles sont leurs attentes précises en termes de « performance »? Combien d’utilisateurs votre système devra-t-il support, aujourd’hui et demain? Avez-vous bien identifié les autres composants, à côté du code PHP, qui vont influencer la vitesse réelle et perçue de votre système, comme les frontaux, la bande passante, le type de deviceutilisé par les visiteurs? Avez-vous fait un benchmark de vitesse de vos concurrents? On le voit – la recherche de la « performance » nécessite tout d’abord une réflexion de fond sur la définition-même de ce mot, mise dans le contexte de votre projet.

Astuce#1 pour de mauvaises performances PHP : ignorer la vraie signification du mot.

 

Corolaire immédiat – se borner à ne regarder que son code. Une application PHP est un écosystème complexe, dans lequel interviennent potentiellement de nombreuses technologies. Si un code PHP « pourri » représente une source certaine pour de mauvaises performances, un code PHP optimisé ne garantit en rien des performances optimales. Structure de base de données rocambolesque, absence d’utilisation de opcode cacheou de systèmes de cache de données, infrastructure matérielle inadaptée, ne sont que quelques erreurs possibles.

Astuce #2 pour de mauvaises performances PHP : garder une vue tunnel sur PHP isolé de tout le reste. 

 

« Ah zut, mais ça fonctionnait tellement bien dans ma sandbox de développement! »Avez-vous déjà été dans la situation où tout semblait fonctionner très bien, jusqu’à ce que vous déployiez votre solution en production, pour observer la catastrophe opérer? Un environnement de développement ou de QA ne représente que très rarement la réalité de l’environnement de production, et les surprises à rencontrer sont légion si on ne s’y intéresse pas à un certain moment!

Astuce #3 : ne pas faire des tests de vitesse et de montée en charge dans un environnement équivalent à celui de la production.

 

Une partie de la solution est parfois dans le détail! Ainsi, un fine-tuningde certains paramètres PHP, et Apache, et Linux, et MySQL (etc.) permet de gagner en performances, presque gratuitement. Un exemple simple mais concret – adapter les valeurs MinSpareServers, MaxSpareServer, MaxClients, KeepAliveTimeout de votre serveur Apache, pour les accorder à votre type de trafic, et votre infrastructure matérielle, pour ainsi éviter des serveurs engorgés sans raison.

Astuce #4 : garder les valeurs de configuration par défaut des composants utilisés en se disant « Baah, ça a été fait par des pros donc ça doit être bon! » 

 

Si vous vous êtes intéressé aux développement des services « cloud » Amazon, vous savez qu’Amazon propose un service CDN très performant et très bon marché: Amazon CloudFront. C’est vraiment performant, c’est vraiment très bon marché… et c’est vraiment simple à mettre en oeuvre. Il existe beaucoup d’autres technologies et services qu’on peut utiliser aujourd’hui pour accélérer des plates-formes web, à quasiment tous les niveaux, que ce soit code, contenu, architecture de stockage, réseau, protocole, etc.

Astuce #5 : ne pas s’intéresser quotidiennement à la question, et passer à côté de solutions existantes. 

 

Finalement, quel site web ou application web n’a pas vu ses besoins et son utilisation évoluer depuis son lancement? Est-ce que vous savez vraiment comment se comporte votre système aujourd’hui, alors qu’il a été lancé il y a 3 ans? Est-ce que de nouveaux bottlenecks sont apparus avec le temps? Le schéma d’utilisation de vos utilisateurs, que vous aviez peut-être identifié et documenté il y a 3 ans, a-t-il évolué? Etes-vous sur qu’aucun des composants de votre plate-forme ne commence à montrer des performances décroissantes? Le seul moyen de répondre à ces questions, est de mettre en place une stratégie et des outils de monitoring des performances. En fonction de votre cas, il s’agit de monter un mélange d’outils externes et internes pour garder une vue sur les performances de votre application. Citons quelques outils communs : Zend Server , NewRelic , Gomez. Il en existe d’autres, spécialisés plus sur certains aspects que d’autres, faisant que le bon choix de votre collection d’outils, dépend de votre scénario précis.

Astuce #6 : accepter le status quo et pratiquer une politique de l’autruche. 

Post Tags - ,

Written by

The author didnt add any Information to his profile yet