Cours Intensifs Performance PHP, Partie 1: Les bases

Nous savons tous que la performance est importante, mais l’optimisation de la performance est trop souvent visualisée après coup. Par conséquent, établir un projet d’optimisation des performances dans le cadre d’une application lente peut s’avérer assez compliquée – Par où commencer? Dans cette session je vous parlerais des stratégies et technologies qui (d’après mon expérience) ont été les plus réussies afin d’améliorer la performance PHP. Pour commencer, cependant, nous discuterons  de la facilité de gagner sur l’optimisation de performance PHP. Ce sont les choses que vous devez faire et cela vous rapportera de meilleures performances et vous en aurez pour votre argent, et vous devez vous assurez d’avoir tous vérifiés avant de partir sur des choses plus complexes.

Pourquoi est ce que la performance est importante?

La vérité est que la performance de l’application a un impact direct sur votre performance:

  • Microsoft trouvait que les recherches dans Bing était 2 secondes plus lentes entraine un saut de 4.3% en chiffre d’affaire par utilisateur.
  • Lorsque  Mozilla a économisé 2.2 secondes suivant leur page d’accueil, le téléchargement de Firefox progressait de 15.4%.
  • Shopzilla voyait le taux de conversion augmenter de 7 à 12% tel le résultat des efforts d’optimisation de leur performance Web.
  • Faire le site web de Barack Obama augmentait de 60% plus rapidement les conversions en donations de 14%.
  • Pour en savoir plus sur l’impact de performance regarder les précieux conseils de Steve Souders

 

Suivez les meilleures pratiques simples pour commencer à améliorer la performance PHP:

 

Mettre à jour PHP!

L’un des améliorations les plus faciles que vous pouvez réaliser afin d’amélioré la performance et la stabilité est de mettre à jour votre version de PHP. PHP 5.3.x fut sorti en 2009. Si vous n’avez pas migré vers PHP 5.4, le moment est venu! Non seulement vous bénéficierez des corrections de bogues et des nouvelles fonctionnalités, mais vous visualiserez les temps de réponses immédiatement plus rapidement. Allez voir PHP.net pour débuter.

Une fois que vous avez fini la mise à jour de PHP, assurez-vous de désactiver les extensions inutilisées en production tel que xdebug où xhprof.

Usez d’un opcode cache

PHP est un langage interprété, ce qui signifie qu’à chaque fois qu’une page PHP est requise, le serveur interprétera le fichier PHP et le compile dans quelque chose que la machine peut comprendre (opcode). Opcode cache préserve ce code généré dans une mémoire tampon ainsi ce qui doit  être interprété sur la première demande. Si vous n’utilisez pas opcode cache vous raterez un gain de performance très facile. Choisissez votre préféré: APCZend OptimizerXCache, où Eaccellerator. Je recommande vivement APC, écrit par le créateur de PHP, Rasmus Lerdorf.

Utilisez autoloading

De nombreux développeurs écrivent des applications orienté-objet créé un fichier source PHP par niveau de définition. L’un des inconvénients majeurs en écriture PHP est d’avoir à écrire une liste longue de besoins incluant au début de chaque script (un pour chaque niveau). PHP évalue à nouveau ces exigences/comprenant les expressions inlassablement au cours de la période évaluation à chaque fois qu’un fichier contient une où plus de ces expressions, celui-ci est chargé dans l’exécution. Utilisez un chargeur automatique vous permettra de supprimer tout ce que vous exigez/comprenant les états et bénéficier d’une amélioration de la performance. Vous pouvez même mettre en cache les niveaux de votre chargeur automatique en APC pour une petite amélioration de la performance

Débutez avec un chargeur automatique en utilisant le composant Symfony Classloader

Optimisez vos sessions

Pendant HTTP est sans état, la plupart des applications réelles du Web exige un chemin pour gérer les données utilisateur. En PHP, l’état de l’application est gérer via les sessions. La configuration par défaut pour PHP est de conserver les données de session sur le disque. C’est extrêmement lent et ne s’adapte pas au-delà d’un serveur unique. Une meilleure solution est de stocker vos données de session dans une base de données et en amont avec un URL (données les moins récemment utilisées) en cache avec Memcached où Redis. Si vous êtes extrêmement intelligent vous réaliserez que vous devez limiter la taille de vos données de session (4096 octets) et stocker toutes données de session dans un cookie signé où crypté.

Utilisez l’Antémémoire distribuée

Les applications généralement exigent des données. Une donné est en générale structurée et organisé dans une base de données. Selon la nature d’un ensemble de données et comment y accéder il peut s’avérer couteux de l’interroger. Une solution facile est de cacher le résultat de la première demande  dans un mémoire cache comme Memcached où Redis. Si les données changent, vous invalidez le cache et réalisez une autre requête SQL afin d’obtenir le résultat mise à jour de l’ensemble à partir d’une base de données.

Je recommande vivement la Doctrine ORM pour PHP qui a construit le support cache pour Memcached où Redis.

Il y a de nombreux cas d’utilisation d’une antémémoire distribuée à partir des réponses de mise en cache Web et les configurations d’applications pour un rendu entier des pages.

Bloquer le travail en arrière-plan

Souvent les applications Web ont besoin d’exécuter les tâches ce qui peut nécessiter un moment pour qu’elles soient complétées. Dans la plupart des cas il n’y a pas de bonnes raisons de forcer l’utilisateur final d’avoir à attendre que le travail se termine. La solution est de bloquer la file d’attente de travail afin d’exécuter en arrière plan les travaux. Les travaux en arrière-plan sont des travaux qui sont exécutés en dehors du flux principal de votre programme et en général traité suivant un système de file d’attente où de message. Il y a de nombreuses solutions fantastiques qui peuvent aider à résoudre l’exécution des travaux en arrière plan. Les avantages réalisés en termes à la fois d’expérience d’utilisateur final et porté par l’écriture et le traitement des travaux d’exécutions longs depuis la file d’attente. Je suis un fan inconditionnel de Resque pour PHP qui est un ensemble d’outils simple pour exécuter les tâches à partir de files d’attentes. Il y a une variété d’outils qui fournissent des files d’attentes où des messageries qui fonctionnent bien avec PHP:

Je recommande vivement l’excellente série de blogs de Wan Qi Chen comment débuter avec des travaux en arrière plan et Resque pour PHP.

User location update workflow with background jobs

ATOUT HTTP en cache

HTTP en cache est l’une des technologies les plus mal comprises sur Internet. Allez lire les spécifications HTTP en cache. Pas d’inquiétude, j’attendrais. Sérieusement, allez le faire! Ils résolvent tous ces problèmes de conceptions en cache, il y a quelques décennies. Il se résume à l’expiration où l’annulation et lorsqu’il est utilisé correctement peut économiser beaucoup de charge suivant vos serveurs d’application. S’il vous plait lire l’excellent guide sur HTTP en cache de Mark Nottingam. Je recommande vivement d’utiliser Varnish comme l’inverse d’un cache proxy afin d’alléger la charge sur vos serveurs d’application.

 

Screen-Shot-2013-05-20-at-5.03.00-PM2

 

Optimisez votre cadre de travail préféré

 

php_framework_overlay3

Plongez profondément dans les spécifications afin d’optimiser chaque cadre de travail est en dehors du champ d’application de ce message, mais ces principes s’appliquent pour chaque cadre de travail:

  • Se tenir à jour des dernières versions stables de votre cadre de travail préféré
  • Désactivez les fonctionnalités que vous n’utilisez pas (I18N, Security, etc.)
  • Activez les fonctionnalités de mise en cache afin de voir l’ensemble des résultats mise en cache

Apprendre comment profiler (optimiser) le code pour la performance PHP

Xdebug est une extension PHP pour débogage puissant. Il support l’empilement et la fonction des traces, information de profilage et allocation de mémoire ainsi que l’analyse d’exécution de scripts. Il permet aux développeurs de facilement optimiser le code PHP.

WebGrind est un Xdebug interface de profilage web dans PHP5. Il applique un sous-ensemble des fonctionnalités de kcachegrind et s’installe en quelques secondes et fonctionne sur toutes les plateformes. Pour des optimisations rapides et pratiques il fait le travail. Voici une capture d’écran montrant le profilage:

Lisez le guide de Chris Abernethy pour profiler PHP avec XDebug et Webgrind.

XHprof est un profileur hiérarchique de niveau de fonctions pour PHP disposant d’un rapport et interface utilisateur. XHProf est capable de rapporter un niveau de fonction inclusive et exclusive temps Mur, mémoire utilisée, temps Processeur (CPU) et nombre d’appels pour chaque fonction. En outre, il supporte la capacité de comparer deux exécutions (Rapports hiérarchique DIFF) où résultats d’agrégats à partir de multiples exécutions.

AppDynamics est un logiciel de gestion d’application de performance conçu pour aider les développeurs et résoudre les problèmes dans les applications de production complexes.

 

 

Complete Visibility

Commencez avec AppDynamics dès aujourd’hui et obtenez une analyse en profondeur de vos performances d’applications.

Performance application PHP n’est qu’une partie de la bataille

Maintenant que vous avez optimisé le serveur, vous pouvez passer du temps à améliorer l’interface client! Dans les applications modernes du Web la plupart du temps vu l’expérience de l’utilisateur final est passée à attendre le rendu de l’interface client. Google a dédié plusieurs ressources afin d’aider les développeurs à améliorer la performance côté client.

Les meilleurs pratiques de performance web Googles

  • Steve Souders – Hautes performances des sites Webs

Venez nous voir en direct!

Si vous êtes intéressé pour en apprendre d’avantages sur les meilleures pratiques pour extension PHP dans le monde réel rejoignez ma session à LonestarPHP à Dallas, Texas où Conférence Internationale PHP à Berlin, Allemagne.

Cet article est la traduction du texte original en anglais. Ci-joint le texte original:  http://www.appdynamics.com/blog/php/php-performance-crash-course-part-1-the-basics/#sthash.lIAnKt7C.dpuf