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/