Optimiser les performances de son code PHP

26 Sep 2012 18 ,

Quand une application PHP nécessite des performances optimales, il faut recourir à certaines mesures techniques d’optimisations. Il est souvent préférable de passer outre certaines bonnes pratiques. Cet article regroupe des astuces algorithmiques afin d’optimiser les performances de son code PHP. Si vous en avez d’autres, n’hésitez pas à commenter.

Optimiser son code PHP

Voici les astuces pour optimiser son code PHP :

  • supprimer les include_once et require_once de votre code
    [php] // Non optimisé
    require_once ‘/php/core/class.php’;
    // Optimisé
    require ‘/php/core/class.php’;
    [/php]
  • déclarer vos méthodes en static quand vous le pouvez
  • utiliser des chemins absolus lors de vos inclusions (require, include, autoload)
  • éviter les expressions régulières
  • bannissez l’utilisation de @ (masquer les erreurs)
    [php] // Non optimisé
    @move_uploaded_file(‘D65edsqDDSQ’, ‘/tmp/file.csv’);
    // Optimisé
    move_uploaded_file(‘D65edsqDDSQ’, ‘/tmp/file.csv’);
    [/php]
  • préférer ‘ à « 
    [php] // Non optimisé
    echo "Je suis une chaine\n";
    // Optimisé
    echo ‘Je suis une chaine’ . PHP_EOL;
    [/php]
  • utilisez echo() plutôt que print()
  • traquer et corriger les erreurs PHP (notice, deprecated, warning, etc.)
  • n’utilisez pas de fonction dans des boucles
    [php] // A bannir absolument
    for ($x=0; $x < count($array); $x++)
    [/php]
  • évitez les boucles imbriquées
  • évitez les méthodes magiques _get(), __set(), __call(), __autoload()
  • évitez les accesseurs et modifieurs inutiles, préférez les paramètres de classes public
    [php] class dog {
    public $name =  »;

    public function setName($name) {
    $this->name = $name;
    }

    public function getName() {
    return $this->name;
    }
    }
    // Notice that setName() and getName() do nothing more than store and return the name property, respectively.
    $rover = new dog();
    $rover->setName(‘rover’);
    echo $rover->getName();

    // Setting and calling the name property directly can run up to 100% faster, as well as cutting down on development time.
    $rover = new dog();
    $rover->name = ‘rover’;
    echo $rover->name;
    [/php]

  • tenez votre version de PHP à jour
  • utilisez des gestionnaires de cache : memcached, APC, etc.
  • évitez d’utiliser des variables inutiles
    [php] // Non optimisé
    $description = strip_tags($_POST[‘description’]);
    echo $description;
    // Optimisé
    echo strip_tags($_POST[‘description’]);
    [/php]
  • décharger la mémoire en utilisant unset()
  • utilisez strtr() plutôt que str_replace() ou preg_replace()
  • utilisez le switch/case() plutôt que des if() multiples
    [php] // Non optimisé
    if ($a < $b && !$c) {} if ($a > $b && !$c) {}
    if ($a < $b && $c) {} if ($a > $b && $c) {}
    // Optimisé
    switch(true) {
    case ($a < $b && !$c): break; case ($a > $b && !$c): break;
    case ($a < $b && $c): break; case ($a > $b && $c): break;
    }
    [/php]
  • utilisez les lors des accès tableaux
    [php] $array[‘id’] /* plutôt que */ $array[id];
    [/php]
  • évitez les variables globales
  • préférer les pages HTML statiques aux scripts PHP
  • vérifiez si les variables sont disponibles via isset() (si besoin)
  • remplacez strlen($var) < 2 par $var{2}
    [php] // Non optimisé
    if (strlen($var) < 2) { echo "var is too short"; }
    // Optimisé
    if (!isset($var{2})) { echo "var is too short"; }
    [/php]
  • ++$i et plus rapide que $i++
  • n’abusez pas de la Programmation Orientée Objet (POO), le procédural est plus rapide
  • utilisez le design pattern singleton ou l’injection de dépendances
  • utilisez du cache
  • utilisez du cache !
  • utilisez du cache !!!

Sources

http://prendreuncafe.com/blog/post/2006/11/22/12-astuces-optimisation-performances-php
https://developers.google.com/speed/articles/optimizing-php
http://phplens.com/lens/php-book/optimizing-debugging-php.php
http://www.chazzuka.com/63-best-practice-to-optimize-php-code-performances-58/