10 points pour optimiser vos applications PHP

XDebug profiler

Ami du PHP, assurez le minimum en optimisant un maximum

PHP est l'enfant né en 1994 d'un drôle de mariage entre le langage PERL et le C.

Il a hérité de ses parents : simple à aborder, diablement efficace pour construire des applications Web rapidement. Mais il existe une contre-partie.
Il y a plusieurs façons de faire les mêmes opérations : la bonne et les autres.

10 bonnes pratiques PHP

  • L'affichage : la commande echo est 10% plus rapide que print
  • Les chaines de caractères : externalisez les variables des chaines : echo 'nom: '.$nom."\n"; est 20% plus rapide que echo "nom: $nom\n"; ou utilisez sprintf qui est 10 fois plus rapide que print pour afficher des chaines qui contiennent des variables
  • Les boucles et les tests : for est 17 fois plus rapide si le test de fin s'appuie sur une variable plutôt qu'une fonction, 24 fois plus rapide qu'un while, 53 fois plus rapide qu'un foreach, if... elseif... est 11 fois plus rapide qu'un switch... case...
  • Libération des ressources : faites un unset des variables inutiles et fermez les connexions vers la base de données quant elles sont inutiles, évitez la programmation objet en PHP qui est gourmande en mémoire et 4 fois plus lente qu'une programmation procédurale.
  • Choix des méthodes : n'utilisez pas de méthode magic préfixée par deux underscores, par exemple __unset, mais préférer les fonctions de hauts niveaux.
  • L'inclusion de code : require() est 4 fois plus rapide que require_once(). Limitez l'usage de ce dernier dans le cadre de fonction fréquemment appelée incluant de grosses bibliothèques. L'utilisation d'un chemin absolu dans les inclusions de fichiers est 2 fois plus rapide qu'un chemin relatif
  • Les erreurs : l'opérateur de suppression des erreurs @ double le temps d'exécution des méthodes. Il est préférable de gérer les erreurs manuellement, d'augmenter la sévérité de l'interpréteur PHP via la directive error_reporting(E_STRICT)
  • Une page HTML statique est 10 fois plus rapide à restituer qu'une page PHP. Cachez les résultats en évitant si possible les framework complexes comme Smarty, utilisez XDebug pour optimiser votre code, utilisez un précompilateur PHP comme XCache
  • Les variables : l'utilisation des constantes est 7 fois plus rapide que les variables, les opérations sur les variables locales sont 3 fois plus rapide que celle sur les attributs d'un objet
  • La sécurité : protégez vos applications des attaques par injection SQL en encodant les chaines à destination de la base de données avec la méthode mysql_real_escape_string(), des attaques par Cross Site Scripting (XSS) en encodant les chaines à destination de conteneurs HTML par la méthode htmlspecialchars() et manipulez les données sensibles (compte, mot de passe...) exclusivement cryptées à l'aide de la méthode md5()

Source : PHP: Hypertext preprocessor

Commentaires

"évitez la programmation objet en PHP qui est gourmande en mémoire et 4 fois plus lente" C'est dur çà, il faut faire attention à ne pas miser tout sur la performance système au detriment de la maintennabilité du code (qui en PHP est déjà pas simple...). C'est comme si on pensait demain, en java il ne faut plus utiliser hibernate, mais revenir au requette sql directe... c'est certe plus rapide et optimisé, mais pas vraiment plus efficace dans le long terme.

Houlà, beaucoup de mélange des genres à mon gout Eric.

Les programmes objets ne sont ni plus ni moins maintenables que les programmes procéduraux, ou linéaires.
La maintenabilité immédiate des programmes dépend principalement des programmeurs, dans une seconde mesure du niveau d'abstraction de l'architecture et du langage.
Je me souviens encore de portions de code source en langage C du noyau Linux de 1994 dont la clarté n'a rien à envier à ce que l'on trouve couramment 15 ans plus tard malgré l'adoption des commentaires Javadoc.

Pour revenir au PHP, ce qu'il faut retenir est que même si PHP 5 permet de coder avec une approche objet, le résultat n'est pas performant.
C'est d'ailleurs la mauvaise surprise qu'à eu la communauté Drupal, à qui est dédié cet article en clin d'oeil. Suite à la refonte full-object de Drupal7 : un jolie code, clair, 30% plus petit, plus de cache, moins de requêtes, et 30% plus lent que Drupal6...
Il n'y a donc aucun intérêt aujourd'hui à faire du PHP objet, sauf si le développeur ne sait pas analyser un problème avec une approche procédurale et ne connait pas d'autre langage objet plus performant.

Concernant Hibernate, tout dépend du contexte. C'est un framework d'abstraction. Comme d'autres outils, il représente un gage de qualité minimum mais n'est pas un outil magique.
Dans la pratique, si les gains sont démontrés dans le cadre d'un projet, pourquoi pas. Sinon, il vaut mieux passer son chemin tant le fine-tuning des requêtes est complexe et la vitesse de développement plus lente que l'usage du SQL.

A te relire