On parle très souvent de l'optimisation de code PHP, mais dans le concret, on se rend très vite compte que tous les conseils ne sont pas appliqués. Après la publication d'un article en anglais, sur 12 astuces d'optimisations PHP, je vais ici traduire ces astuces et indiquer les autres qui me semblent indispensables.
- Préférez les méthodes statiques. La rapidité d'exécution du code PHP est multiplié par 4 !
- Évitez autant que vous pouvez l'utilisation des méthodes magiques (__get, __set, etc)
- Require_once est plus lourd que require (logique puisqu'il va vérifier que le fichier n'à pas déjà été chargé !)
- Préférez l'utilisation des chemins absolus, qui évitent au moteur PHP de résoudre le chemin par le biais du système (utilisez $_SERVER ['DOCUMENT_ROOT'])
- Pour avoir le temps en secondes, préférez $_SERVER['REQUEST_TIME'] à time (). En effet, time () demande un temps de calcul à PHP alors que $_SERVER['REQUEST_TIME'] est déjà calculé !
- Evitez au maximum l'utilisation des expressions régulières (utilisation des fonctions strncasecmp, strpbrk et stripos)
- str_replace est plus rapide que preg_replace, mais strtr est 4 fois plus rapide que str_replace ... !!
- Preferez le passage de paramètre à des fonctions en String plutôt que Array, ce qui évitera un temps de traitement supplémentaire pour le parcours du tableau !
- L'utilisation du @ pour ne pas afficher les erreurs ralentit considérablement le traitement.
- $row['id'] est 7 fois plus rapide que $row[id] !!!
- Les messages d'erreurs ralentissent votre code ! Normal puisqu'ils sont (peuvent) être écrit dans le fichier de log, affichés, etc
- Essayez au maximum de sortir les fonctions telles que count, sizeof, ... des boucles. Car ces fonctions sont appelées à chaque itérations, ce qui alourdit considérablement le traitement !
- Préférez l'usage des simples quotes plutôt que des doubles quotes. Les doubles quotes sont parsées, tandis que les simples quotes non ! (le $ est affiché et n'est pas traité en tant que variable !)
- Évitez au maximum la redondance de code, en utilisant des classes ou des fonctions. Cela permet aussi une maintenance et une pérennité de votre code, puisqu'il suffira ensuite de modifier qu'à un seul endroit, au lieu de parcourir tous vos fichiers !
- Préférez l'utilisation des fonctions preg_* au lieu de ereg_* qui sont maintenant dépréciée !
- Préférez l'utilisation de
if (!isset ($myvar{5}))
echo $myvar.' is too short';
au lieu de
Isset n'est pas une fonction mais une structure du langage, qui est donc beaucoup plus rapide !
- Préferez l'usage de ++$i plutot que $i++, qui est plus rapide (s'applique uniquement à PHP !)
- echo est plus rapide que print tout simplement car print retourne un état de succès tandis que echo ne fait qu'afficher.
- Tout ce qui n'est pas du PHP doit être en dehors des ?><?php ! Eviter les longs echo '<html>....'; qui seront plus long à parser que des ?><html>... !!!
- Préférez l'utilisation de la librairie ctype (activée par défaut depuis PHP 4.2.0) plutôt que des expressions régulières pour valider des entrées utilisateurs simple (tel que des nombres, des chaines, etc). Jetez un oeil à la librairie ctype sur php.net
- true est plus rapide que TRUE (sisi c'est vrai ! :p). Pourquoi ? parce que dans la structure de langage de PHP, la valeur booléenne est true. Si vous mettez TRUE, PHP va déjà vérifier si ce n'est pas une constante. C'est donc une perte de temps.
- 1 est plus rapide que true (et inversement 0 est plus rapide que false). Et comme PHP n'est pas typé ...
- Préferez if (42 == $value) plutot que ($value == 42). Ce ne sera pas plus rapide, mais vous obtiendrez une erreur si vous omettez un égal ! (42 = $value vous retournera une erreur. $value = 42 ne fera qu'assiger 42 à la variable $value, et vous comprendrez pas pourquoi votre code ne fonctionne pas :p)
- Il est préférable d'utiliser :
$myArray = array ('banane' => 0, 'pomme' => 1, 'orange' => 2);
if (isset ($myArray[$fruits])) {
echo $fruits.' exist';
}
plutot que
$myArray = array ('banane', 'pomme', 'orange');
if (array_exists ($myArray, $fruits)) {
echo $fruits.' exists';
}
- De plus gros blocs de code php augmentent la rapidité du script plutôt que des <?php .. ?> à chaque lignes
- Si vous utilisez echo, la concaténation est plus rapide avec des virgules qu'avec des points !!
echo 'Bonjour Mr',$sName,', vous avez ',$iMsg,' message(s)'
- Utiliser au maximum unset, afin de libérer le plus de mémoire possible
- Essayer au maximum de génerer des pages html statiques une fois le contenu mis à jour, afin d'éviter un traitement à chaque affichage !
Toutes ces méthodes vous permettront d'avoir un code performant, ce qui aura pour conséquence d'améliorer la rapidité de rendu de vos pages en cas de forte consultation.